Assignment

Short objective

The objective of this report is to analyze the incidence rates of Guillain-Barré Syndrom (gbs) and anaphylactic shock using the PHARMO database, and to present the results in a clear and concise manner.

Methods

PHARMO

The data for this analysis was obtained from the PHARMO database, which is a research institute in the Netherlands that maintains a database of electronic medical records. The Pharmo Data Network is a population-based network of healthcare databases and combines data from different healthcare settings in the Netherlands. These different data sources are linked on a patient level through validated algorithms.

Study population

For this research particularly, individuals who were in the study between 01/01/2017 and 31/12/2020 are included. In addition, the study’s inclusion and exclusion criteria consist of three requirements. The first requirement is that individuals must have at least one year of follow-up before the study’s start date. The second requirement is that individuals must have at least one day of follow-up after the study’s start date. Lastly, the study will not consider repeated events, and individuals will be censored at the first occurrence of an event. After fulfilling the aforementioned requirements, we have a study population of N = 675

Data Preperation

Prior to the analysis, various tables are prepared and then combined in order to obtain the incidence rates. First the OBSERVATION_PERIOD table was loaded and individuals who are not in the above mentioned study population, will be removed.

After doing this, the PERSONS table was loaded. In this table, an age variable is made with the birth data variable. The age was created with the start of the study period as reference. with this age variable, the following age bands are created: 0-19, 20-39, 40-59, 60-79. The age band 80+ is not created, because the there are no individuals who are older than 67.

The next step in the date preparation, was merging the OBSERVATION_PERIODS and PERSON table. We only kept the individuals who are in the OBSERVATION_PERIODS table.

When the aforementioned tables are merged, Concept sets were created. These sets were created from diagnostic codes from the codesheet. All diagnostic codes and vocabulary of the events used to make incidence rates can be found in Table 1

When the aforementioned tables are merged, Concept sets were created. These sets were created from diagnostic codes from the codesheet. All diagnostic codes and vocabulary of the events we will make incidence rates of can be found in Table 1.

Figure 1: ANAPHYL and GBS event codes

Lastly, the EVENTS table is loaded, and merged with the event codes. If the persons had an event before the start of the study, they are removed from the dataset. If a person has more than one event, the second event is removed.

Analyis

For the analysis, incidence rates per 1000 person years for the study population are created per event (i.e. Anaphylactic Shock Narrow, Anaphylactic shock broad, and gbs). The formula for the incidence rates can be found below:

\[ \text{Incidence Rates overall} = \frac{Total \ number \ of \ events}{Total \ person-years} * 1000 \]

Afterwards, the incidence rates are stratified by year and age-bands. The formulas for these can be found below: \[ \text{Incidence rates by year} = \frac{total \ number \ of \ events \ for \ each \ year} { person-years \ for \ each \ year} * 1000 \]

\[ \text{Incidence rates by year by age bands} = \frac{Total \ number \ of \ events for \ each \ year \ per \ age \ band}{person-years \ for \ each \ year \ per \ age \ band} * 1000 \]

To assess the technical validation, confidence intervals are used. Exact Poisson confidence limits for the estimated rate are found as the Poisson means, for distributions with the observed number of events and probabilities relevant to the chosen confidence level, divided by time at risk. The relationship between the Poisson and chi-square distributions is employed here (Ulm, 1990):

\[Y_l = \frac{\chi^2_{2Y , a/2}}{2}\] \[Y_u=\frac{\chi^2_2(Y+1), 1-a/2}{2}\]

where Y is the observed number of events, \(Y_l\) and \(Y_u\) are lower and upper confidence limits for Y respectively, \(\chi^2_{v,a}\) is the chi-square quantile for upper tail probability on ν degrees of freedom.

Results

The forest plot figures (see Figure 2), show the incidence rates. A total of 86 events occurred. Of these events 28 were anaphylaxis narrow, 22 were anaphylaxis possible and 36 were GBS. When stratified in to age bands, the person years become lower and there is low confidence. Especially in the high and low age bands. Most events occurred in the first three years. In these years each type of event status had around 15 to 20 occurred events. The last year of the study has almost no events and bad incidence rate confidence interval.

Forest Plot Figures

Total

Forest plots of total IR

Figure 2: Forest plots of total IR

2017

forest plots data from 2017

Figure 3: forest plots data from 2017

2018

Forest Plot data from 2018

Figure 4: Forest Plot data from 2018

2019

Forest Plot data from 2019

Figure 5: Forest Plot data from 2019

2020

Forest plot data from 2020

Figure 6: Forest plot data from 2020

Lessons learned

We have learned to take data from various tables, and structure it to a dataset which can be analysed. In addition, we have learned that a lot of data is needed to make inference about incidence rates. That is, when data needs to be stratified. We discovered that the distribution of the data becomes skewed when stratified in different age bands. In this case the incidence over a 1000 person years confidence interval will get wider and thus make it harder to indicate the true incidence rate. More data from different sources could help in creating a better distributed stratification. This can be accomplished by using data from a Common Data Model. The data could also have some bias. All of the data is collected using health registries and (routine) care data. This means that every person in the dataset, has had contact with an health institution. Thus, perfectly healthy people with no events will not be included in the dataset.

Annexes

Annex 1 Results Table

Annex 2 Day 6

LS0tCnRpdGxlOiAiQXNzaWdubWVudCBEYXkgOCIKYXV0aG9yOiAiTWFydGlqbiBLb3N0ZXIgNjIzNDExOSwgSnVycmlhbiB2YW4gZGUgS3JhYXRzIDU5NjE2ODgsIFRpbSBQb29ydGh1aXMgMDY1MTQ3OCIKZGF0ZTogImByIFN5cy5EYXRlKClgIgpvdXRwdXQ6CiAgYm9va2Rvd246Omh0bWxfZG9jdW1lbnQyOgogICAgdG9jOiB0cnVlCiAgICBoaWdobGlnaHQ6IHRhbmdvCiAgICB0aGVtZTogcGFwZXIKICAgIGNvZGVfZG93bmxvYWQ6IHRydWUKICAgCi0tLQoKPCEtLSBDb25ncmF0cyBZb3UgZm91bmQgb3VyIGNvZGUsIEVuam95ISAgLS0+CgpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBGQUxTRSwgbWVzc2FnZSA9IEZBTFNFLCBjb21tZW50ID0gTkEsIHdhcm5pbmcgPSBGQUxTRSwKICAgICAgICAgICAgICAgICAgICAgIGVycm9yPUZBTFNFLCByZXN1bHRzPSdoaWRlJyxmaWcua2VlcD0nYWxsJykKYGBgCgpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0KCmxpYnJhcnkoa25pdHIpCmxpYnJhcnkoZGF0YS50YWJsZSkKbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkocmVhZHhsKQpsaWJyYXJ5KGx1YnJpZGF0ZSkKbGlicmFyeShEVCkKbGlicmFyeShlcGlSKQpgYGAKCiMgQXNzaWdubWVudCB7LX0KCgpgYGB7cn0KCiMgbG9hZCB0aGUgdGFibGVzCk9fUCA8LSByZWFkLmNzdigiVGFibGVzL09CU0VSVkFUSU9OX1BFUklPRFMuY3N2IikKZXZlbnRzIDwtIHJlYWQuY3N2KCdUYWJsZXMvRVZFTlRTLmNzdicpCnBlcnNvbnMgPC0gcmVhZC5jc3YoJ1RhYmxlcy9QRVJTT05TLmNzdicpCmluc3RhbmNlIDwtIHJlYWQuY3N2KCdUYWJsZXMvSU5TVEFOQ0UuY3N2JykKY29kZWxpc3QgPC0gcmVhZF9leGNlbCgiVGFibGVzL0NvZGVMaXN0XzIwMjEwMTI4KDEpLnhsc3giLCAKICAgIHNoZWV0ID0gIkFOQVBIWUwiKQpjb2RlbGlzdDIgPC0gcmVhZF9leGNlbCgiVGFibGVzL0NvZGVMaXN0XzIwMjEwMTI4KDEpLnhsc3giLCAKICAgIHNoZWV0ID0gIkdCUyIpCmBgYAoKCiMjIFNob3J0IG9iamVjdGl2ZSB7LSNzaG9ydH0KClRoZSBvYmplY3RpdmUgb2YgdGhpcyByZXBvcnQgaXMgdG8gYW5hbHl6ZSB0aGUgaW5jaWRlbmNlIHJhdGVzIG9mIEd1aWxsYWluLUJhcnLDqSBTeW5kcm9tIChnYnMpIGFuZCBhbmFwaHlsYWN0aWMgc2hvY2sgdXNpbmcgdGhlIFBIQVJNTyBkYXRhYmFzZSwgYW5kIHRvIHByZXNlbnQgdGhlIHJlc3VsdHMgaW4gYSBjbGVhciBhbmQgY29uY2lzZSBtYW5uZXIuCgojIyBNZXRob2RzIHstI21ldGh9CgojIyMgUEhBUk1PIHstI3BoYXJ9CgpUaGUgZGF0YSBmb3IgdGhpcyBhbmFseXNpcyB3YXMgb2J0YWluZWQgZnJvbSB0aGUgUEhBUk1PIGRhdGFiYXNlLCB3aGljaCBpcyBhIHJlc2VhcmNoIGluc3RpdHV0ZSBpbiB0aGUgTmV0aGVybGFuZHMgdGhhdCBtYWludGFpbnMgYSBkYXRhYmFzZSBvZiBlbGVjdHJvbmljIG1lZGljYWwgcmVjb3Jkcy4gVGhlIFBoYXJtbyBEYXRhIE5ldHdvcmsgaXMgYSBwb3B1bGF0aW9uLWJhc2VkIG5ldHdvcmsgb2YgaGVhbHRoY2FyZSBkYXRhYmFzZXMgYW5kIGNvbWJpbmVzIGRhdGEgZnJvbSBkaWZmZXJlbnQgaGVhbHRoY2FyZSBzZXR0aW5ncyBpbiB0aGUgTmV0aGVybGFuZHMuIFRoZXNlIGRpZmZlcmVudCBkYXRhIHNvdXJjZXMgYXJlIGxpbmtlZCBvbiBhIHBhdGllbnQgbGV2ZWwgdGhyb3VnaCB2YWxpZGF0ZWQgYWxnb3JpdGhtcy4KCgoKYGBge3J9CgoKZGZwMSA8LSBPX1AgJT4lIAogIGZpbHRlcihvcF9zdGFydF9kYXRlIDw9IDIwMTYwMTAxLCAjIFJlbW92ZSBpbmRpdmlkdWFscyB0aGF0IGRvIG5vdCBoYXZlIGF0IGxlYXN0IDEgeWVhciBvZiBGVSBiZWZvcmUgc3RhcnQgb2Ygc3R1ZHkKICAgICAgICAgb3BfZW5kX2RhdGUgPj0gMjAxNzAxMDIpICMgbWFrZSBzdXJlIHRoYXQgdGhlIGluZGl2aWR1YWxzIGF0IGxlYXN0IGhhdmUgMSBkYXkgb2YgZnUgZHVyaW5nIHN0dWR5IHBlcmlvZCAKZGZwMSRzdGFydF9zdHVkeSA8LSAyMDE3MDEwMQpgYGAKCmBgYHtyfQojIE1ha2Ugc3VyZSB0aGF0IGFsbCBkYXRlcyBhcmUgaW4gRGF0ZSBmb3JtYXQgWVlZWS1NTS1ERApkZnAxIDwtIGRmcDEgJT4lIAogIG11dGF0ZShvcF9zdGFydF9kYXRlID0gYXMuRGF0ZSh5bWQob3Bfc3RhcnRfZGF0ZSkpLAogICAgICAgICBvcF9lbmRfZGF0ZSA9IGFzLkRhdGUoeW1kKG9wX2VuZF9kYXRlKSksCiAgICAgICAgIHN0YXJ0X3N0dWR5ID0gYXMuRGF0ZSh5bWQoc3RhcnRfc3R1ZHkpKSkKYGBgCgpgYGB7cn0KcGVyc29ucyA8LSBwZXJzb25zICU+JSAKICBtdXRhdGUoYmlydGhkYXRlID0gYXMuRGF0ZSh5bWQoeWVhcl9vZl9iaXJ0aCoxMDAwMCttb250aF9vZl9iaXJ0aCoxMDArZGF5X29mX2JpcnRoKSksICMgY2FsY3VsYXRlIHRoZSBiaXJ0aCBkYXRlCiAgICAgICAgIGFnZSA9IGFzLm51bWVyaWMoZGlmZnRpbWUKICAgICAgICAgICAgICAgICAgICAgICAgICAoYXMuRGF0ZSh5bWQoMjAxNzAxMDEpKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXJ0aGRhdGUsIHVuaXRzPSdkYXlzJykpIC8gMzY1LjI1LCAjIGNhbGN1bGF0ZSB0aGUgYWdlIAogICAgICAgICBhZ2VfYmFuZHMgPSBjdXQoYWdlLCBicmVha3MgPSBjKDAsMTksMzksNTksNzksSW5mKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlLmxvd2VzdCA9IFQsaW5jbHVkZS5oaWdoZXN0ID0gVCwgCiAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJbMCwxOV0iLCdbMjAsMzldJywgJ1s0MCw1OV0nLCAnWzYwLDc5XScsICdbODArXScpKSAjIE1ha2Ugc3VyZSB0aGUgYWdlcyBhcmUgZGl2aWRlZCBpbiBhZ2UgYmFuZHMgCiAgICAgICAgICAgICAgICAgICAgICAgICApICU+JSAKICBmaWx0ZXIoYWdlID49IDApCmBgYAoKCgojIyMgU3R1ZHkgcG9wdWxhdGlvbiB7LSNzdHVwb3B9CgpGb3IgdGhpcyByZXNlYXJjaCBwYXJ0aWN1bGFybHksIGluZGl2aWR1YWxzIHdobyB3ZXJlIGluIHRoZSBzdHVkeSBiZXR3ZWVuIDAxLzAxLzIwMTcgYW5kIDMxLzEyLzIwMjAgYXJlIGluY2x1ZGVkLiBJbiBhZGRpdGlvbiwgdGhlIHN0dWR5J3MgaW5jbHVzaW9uIGFuZCBleGNsdXNpb24gY3JpdGVyaWEgY29uc2lzdCBvZiB0aHJlZSByZXF1aXJlbWVudHMuIFRoZSBmaXJzdCByZXF1aXJlbWVudCBpcyB0aGF0IGluZGl2aWR1YWxzIG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgeWVhciBvZiBmb2xsb3ctdXAgYmVmb3JlIHRoZSBzdHVkeSdzIHN0YXJ0IGRhdGUuIFRoZSBzZWNvbmQgcmVxdWlyZW1lbnQgaXMgdGhhdCBpbmRpdmlkdWFscyBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIGRheSBvZiBmb2xsb3ctdXAgYWZ0ZXIgdGhlIHN0dWR5J3Mgc3RhcnQgZGF0ZS4gTGFzdGx5LCB0aGUgc3R1ZHkgd2lsbCBub3QgY29uc2lkZXIgcmVwZWF0ZWQgZXZlbnRzLCBhbmQgaW5kaXZpZHVhbHMgd2lsbCBiZSBjZW5zb3JlZCBhdCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBhbiBldmVudC4gQWZ0ZXIgZnVsZmlsbGluZyB0aGUgYWZvcmVtZW50aW9uZWQgcmVxdWlyZW1lbnRzLCB3ZSBoYXZlIGEgc3R1ZHkgcG9wdWxhdGlvbiBvZiBfTl8gPSBgciBucm93KGRmcDEpYAoKIyMjIERhdGEgUHJlcGVyYXRpb24gey0jZGF0cHJlcH0KClByaW9yIHRvIHRoZSBhbmFseXNpcywgdmFyaW91cyB0YWJsZXMgYXJlIHByZXBhcmVkIGFuZCB0aGVuIGNvbWJpbmVkIGluIG9yZGVyIHRvIG9idGFpbiB0aGUgaW5jaWRlbmNlIHJhdGVzLiBGaXJzdCB0aGUgT0JTRVJWQVRJT05fUEVSSU9EIHRhYmxlIHdhcyBsb2FkZWQgYW5kIGluZGl2aWR1YWxzIHdobyBhcmUgbm90IGluIHRoZSBhYm92ZSBtZW50aW9uZWQgc3R1ZHkgcG9wdWxhdGlvbiwgd2lsbCBiZSByZW1vdmVkLiAKCkFmdGVyIGRvaW5nIHRoaXMsIHRoZSBQRVJTT05TIHRhYmxlIHdhcyBsb2FkZWQuIEluIHRoaXMgdGFibGUsIGFuIGFnZSB2YXJpYWJsZSBpcyBtYWRlIHdpdGggdGhlIGJpcnRoIGRhdGEgdmFyaWFibGUuIFRoZSBhZ2Ugd2FzIGNyZWF0ZWQgd2l0aCB0aGUgc3RhcnQgb2YgdGhlIHN0dWR5IHBlcmlvZCBhcyByZWZlcmVuY2UuIHdpdGggdGhpcyBhZ2UgdmFyaWFibGUsIHRoZSBmb2xsb3dpbmcgYWdlIGJhbmRzIGFyZSBjcmVhdGVkOiAwLTE5LCAyMC0zOSwgNDAtNTksIDYwLTc5LiBUaGUgYWdlIGJhbmQgODArIGlzIG5vdCBjcmVhdGVkLCBiZWNhdXNlIHRoZSB0aGVyZSBhcmUgbm8gaW5kaXZpZHVhbHMgd2hvIGFyZSBvbGRlciB0aGFuIGByIHJvdW5kKG1heChwZXJzb25zJGFnZSkpYC4gIAoKVGhlIG5leHQgc3RlcCBpbiB0aGUgZGF0ZSBwcmVwYXJhdGlvbiwgd2FzIG1lcmdpbmcgdGhlIE9CU0VSVkFUSU9OX1BFUklPRFMgYW5kIFBFUlNPTiB0YWJsZS4gV2Ugb25seSBrZXB0IHRoZSBpbmRpdmlkdWFscyB3aG8gYXJlIGluIHRoZSBPQlNFUlZBVElPTl9QRVJJT0RTIHRhYmxlLiAKCgpXaGVuIHRoZSBhZm9yZW1lbnRpb25lZCB0YWJsZXMgYXJlIG1lcmdlZCwgQ29uY2VwdCBzZXRzIHdlcmUgY3JlYXRlZC4gVGhlc2Ugc2V0cyB3ZXJlIGNyZWF0ZWQgZnJvbSBkaWFnbm9zdGljIGNvZGVzIGZyb20gdGhlIGNvZGVzaGVldC4gQWxsIGRpYWdub3N0aWMgY29kZXMgYW5kIHZvY2FidWxhcnkgb2YgdGhlIGV2ZW50cyB1c2VkIHRvIG1ha2UgaW5jaWRlbmNlIHJhdGVzIGNhbiBiZSBmb3VuZCBpbiBUYWJsZSBcQHJlZihmaWc6Y29kZXMpCgpXaGVuIHRoZSBhZm9yZW1lbnRpb25lZCB0YWJsZXMgYXJlIG1lcmdlZCwgQ29uY2VwdCBzZXRzIHdlcmUgY3JlYXRlZC4gVGhlc2Ugc2V0cyB3ZXJlIGNyZWF0ZWQgZnJvbSBkaWFnbm9zdGljIGNvZGVzIGZyb20gdGhlIGNvZGVzaGVldC4gQWxsIGRpYWdub3N0aWMgY29kZXMgYW5kIHZvY2FidWxhcnkgb2YgdGhlIGV2ZW50cyB3ZSB3aWxsIG1ha2UgaW5jaWRlbmNlIHJhdGVzIG9mIGNhbiBiZSBmb3VuZCBpbiBUYWJsZSBcQHJlZihmaWc6Y29kZXMpLgoKCgoKYGBge3IgY29kZXMsIHJlc3VsdHM9J2FzaXMnLCBmaWcuY2FwID0gJyBBTkFQSFlMIGFuZCBHQlMgZXZlbnQgY29kZXMnfQphbmFwaHlsIDwtIGNvZGVsaXN0ICU+JSAKICBmaWx0ZXIoYENvZGluZyBzeXN0ZW1gPT0gYygnSUNEOScsICdJQ0QxMC9DTScpKQoKZ2JzIDwtIGNvZGVsaXN0MiAlPiUgCiAgZmlsdGVyKGBDb2Rpbmcgc3lzdGVtYD09IGMoJ0lDRDknLCAnSUNEMTAvQ00nKSkKCmNvZGVzIDwtIGRhdGEudGFibGUoRGlhZ25vc2lzID0gcGFzdGUwKCdhbmFwaHlsXycsYW5hcGh5bCRBbGdvcml0aG0sc2VwID0gIiIpLCAKICAgICAgICAgICAgICAgIGV2ZW50X2NvZGUgPSBhbmFwaHlsJENvZGUsIAogICAgICAgICAgICAgICAgVm9jYWJ1bGFyeSA9IGFuYXBoeWwkYENvZGluZyBzeXN0ZW1gKQoKZ2JzdGVtcCA8LSBkYXRhLnRhYmxlKERpYWdub3NpcyA9IHBhc3RlMCgnZ2JzXycsZ2JzJEFsZ29yaXRobSxzZXAgPSAiIiksIAogICAgICAgICAgICAgICAgZXZlbnRfY29kZSA9IGdicyRDb2RlLCAKICAgICAgICAgICAgICAgIFZvY2FidWxhcnkgPSBnYnMkYENvZGluZyBzeXN0ZW1gKQoKY29kZXMgPC0gcmJpbmQoY29kZXMsIGdic3RlbXApCgpkYXRhdGFibGUoY29kZXMsIAogICAgICAgICAgY2FwdGlvbj0nRGlhZ25vc3RpYyBjb2RlcyByZXRyaWV2ZWQgZnJvbSB0aGUgQ29kZUxpc3RfMjAyMTAxMjggQU5BUEhZTCBhbmQgR0JTIHNoZWV0cyAnLAogICAgICAgICAgY2xhc3M9J2NvbXBhY3QnLCAKICAgICAgICAgIHJvd25hbWVzPUYsIAogICAgICAgICAgY29sbmFtZXM9YygnRGlhZ25vc2lzJywgJ0V2ZW50IENvZGUnLCAnVm9jYWJ1bGFyeScpLAogICAgICAgICAgZXh0ZW5zaW9ucz0nQnV0dG9ucycsCiAgICAgICAgICBvcHRpb25zID0gbGlzdChkb20gPSAnQmZydGlwJwogICAgICAgICAgICAgICAgICAgICAgICAgLCBidXR0b25zID0gYygnY29weScsICdjc3YnLCAnZXhjZWwnLCAncGRmJywgJ3ByaW50JykKICAgICAgICAgICkpIyMgRGV6ZSBvcCBsYXRlciBtb21lbnQgbm9nIHdhdCBtb29pZXIgbWFrZW4gCgpgYGAKCgoKTGFzdGx5LCB0aGUgRVZFTlRTIHRhYmxlIGlzIGxvYWRlZCwgYW5kIG1lcmdlZCB3aXRoIHRoZSBldmVudCBjb2Rlcy4gSWYgdGhlIHBlcnNvbnMgaGFkIGFuIGV2ZW50IGJlZm9yZSB0aGUgc3RhcnQgb2YgdGhlIHN0dWR5LCB0aGV5IGFyZSByZW1vdmVkIGZyb20gdGhlIGRhdGFzZXQuIElmIGEgcGVyc29uIGhhcyBtb3JlIHRoYW4gb25lIGV2ZW50LCB0aGUgc2Vjb25kIGV2ZW50IGlzIHJlbW92ZWQuIAoKIyMjIEFuYWx5aXMgey0jYW5hbH0KCgpGb3IgdGhlIGFuYWx5c2lzLCBpbmNpZGVuY2UgcmF0ZXMgcGVyIDEwMDAgcGVyc29uIHllYXJzIGZvciB0aGUgc3R1ZHkgcG9wdWxhdGlvbiBhcmUgY3JlYXRlZCBwZXIgZXZlbnQgKGkuZS4gQW5hcGh5bGFjdGljIFNob2NrIE5hcnJvdywgQW5hcGh5bGFjdGljIHNob2NrIGJyb2FkLCBhbmQgZ2JzKS4gVGhlIGZvcm11bGEgZm9yIHRoZSBpbmNpZGVuY2UgcmF0ZXMgY2FuIGJlIGZvdW5kIGJlbG93OgoKClxbClx0ZXh0e0luY2lkZW5jZSBSYXRlcyBvdmVyYWxsfSA9IFxmcmFje1RvdGFsIFwgbnVtYmVyIFwgb2YgXCBldmVudHN9e1RvdGFsIFwgcGVyc29uLXllYXJzfSAqIDEwMDAgClxdCgpBZnRlcndhcmRzLCB0aGUgaW5jaWRlbmNlIHJhdGVzIGFyZSBzdHJhdGlmaWVkIGJ5IHllYXIgYW5kIGFnZS1iYW5kcy4gVGhlIGZvcm11bGFzIGZvciB0aGVzZSBjYW4gYmUgZm91bmQgYmVsb3c6IApcWwogIFx0ZXh0e0luY2lkZW5jZSByYXRlcyBieSB5ZWFyfSA9IFxmcmFje3RvdGFsIFwgIG51bWJlciBcIG9mIFwgZXZlbnRzIFwgZm9yIFwgZWFjaCBcIHllYXJ9IHsgcGVyc29uLXllYXJzIFwgZm9yIFwgZWFjaCBcIHllYXJ9ICogMTAwMApcXQoKXFsKICBcdGV4dHtJbmNpZGVuY2UgcmF0ZXMgYnkgeWVhciBieSBhZ2UgYmFuZHN9ID0gXGZyYWN7VG90YWwgXCBudW1iZXIgXCBvZiBcIGV2ZW50cyBmb3IgXCBlYWNoIFwgeWVhciBcICBwZXIgXCAgYWdlIFwgYmFuZH17cGVyc29uLXllYXJzIFwgZm9yIFwgZWFjaCBcIHllYXIgXCAgcGVyIFwgYWdlIFwgYmFuZH0gKiAxMDAwClxdCgpUbyBhc3Nlc3MgdGhlIHRlY2huaWNhbCB2YWxpZGF0aW9uLCBjb25maWRlbmNlIGludGVydmFscyBhcmUgdXNlZC4gRXhhY3QgUG9pc3NvbiBjb25maWRlbmNlIGxpbWl0cyBmb3IgdGhlIGVzdGltYXRlZCByYXRlIGFyZSBmb3VuZCBhcyB0aGUgUG9pc3NvbiBtZWFucywgZm9yIGRpc3RyaWJ1dGlvbnMgd2l0aCB0aGUgb2JzZXJ2ZWQgbnVtYmVyIG9mIGV2ZW50cyBhbmQgcHJvYmFiaWxpdGllcyByZWxldmFudCB0byB0aGUgY2hvc2VuIGNvbmZpZGVuY2UgbGV2ZWwsIGRpdmlkZWQgYnkgdGltZSBhdCByaXNrLiBUaGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIFBvaXNzb24gYW5kIGNoaS1zcXVhcmUgZGlzdHJpYnV0aW9ucyBpcyBlbXBsb3llZCBoZXJlIChVbG0sIDE5OTApOgoKJCRZX2wgPSBcZnJhY3tcY2hpXjJfezJZICwgYS8yfX17Mn0kJAokJFlfdT1cZnJhY3tcY2hpXjJfMihZKzEpLCAxLWEvMn17Mn0kJAoKd2hlcmUgWSBpcyB0aGUgb2JzZXJ2ZWQgbnVtYmVyIG9mIGV2ZW50cywgJFlfbCQgYW5kICRZX3UkIGFyZSBsb3dlciBhbmQgdXBwZXIgY29uZmlkZW5jZSBsaW1pdHMgZm9yIFkgcmVzcGVjdGl2ZWx5LCAkXGNoaV4yX3t2LGF9JCBpcyB0aGUgY2hpLXNxdWFyZSBxdWFudGlsZSBmb3IgdXBwZXIgdGFpbCBwcm9iYWJpbGl0eSBvbiDOvSBkZWdyZWVzIG9mIGZyZWVkb20uCgoKCgoKIyMgUmVzdWx0cyB7LSNyZXN9CgpgYGB7cn0KZGF0YSA8LSBsZWZ0X2pvaW4oZGZwMSwgcGVyc29ucywgYnkgPSAicGVyc29uX2lkIikgIyBtZXJnZSB0aGUgT0JTRVJWQVRJT05fUEVSSU9EUyBhbmQgUEVSU09OUyB0YWJsZSAoa2VlcCBvbmx5IGluZGl2aWR1YWxzIHdobyBhcmUgaW4gT0JTRVJWQVRJT05TX1BFUklPRFMgdGFibGUpCmBgYAoKCgoKYGBge3J9CmRmcDIgPC0gbWVyZ2UoY29kZXMsIGV2ZW50cywgYnkgPSAnZXZlbnRfY29kZScpCmRmcDIgPC0gZGZwMiAlPiUgCiAgZmlsdGVyKHN0YXJ0X2RhdGVfcmVjb3JkID4gMjAxNzAxMDEsCiAgICAgICAgIHN0YXJ0X2RhdGVfcmVjb3JkIDwgMjAyMTAxMDEpICU+JSAKICBhcnJhbmdlKHN0YXJ0X2RhdGVfcmVjb3JkKQoKZGZwMiA8LSBkZnAyWyFkdXBsaWNhdGVkKGRmcDIkcGVyc29uX2lkKV0KZGZwMiRlbmRfZGF0ZV9yZWNvcmQgPC0gZGZwMiRzdGFydF9kYXRlX3JlY29yZApkZnAyJGlzX2V2ZW50IDwtIDEKCmBgYAoKYGBge3J9CmRmdG90YWwgPC0gbGVmdF9qb2luKGRhdGEsZGZwMiwgYnkgPSAncGVyc29uX2lkJykKZGZ0b3RhbCRpc19ldmVudFtpcy5uYShkZnRvdGFsJGlzX2V2ZW50KV0gPC0gMApgYGAKCmBgYHtyfQojIGVpbmRlIHZhbiBkZSBzdHVkaWUgcGVyaW9kZSBvcCBoZXQgbW9tZW50IGRhdCBlciBlZW4gZXZlbnQgaXMgYmlqIGVlbiBvYnNlcnZhdGllCmRmdG90YWwkZW5kX2luY2lkZW5jZSA8LSBhcy5EYXRlKHltZChkZnRvdGFsJGVuZF9kYXRlX3JlY29yZCkpCiMgV2hlbiBvYnNlcnZhdGlvbiBkb2VzIG5vdCBoYXZlIGFuIGV2ZW50LCBtYWtlIHN1cmUgZW5kX2luY2lkZW5jZSBpcyBjb2RlZCBhcyBlbmQgc3R1ZHkgcGVyaW9kICgyMDIxLTAxLTAxKQpkZnRvdGFsJGVuZF9pbmNpZGVuY2VbaXMubmEoZGZ0b3RhbCRlbmRfaW5jaWRlbmNlKV0gPC0gYXMuRGF0ZSh5bWQoMjAyMTAxMDEpKSAKI0NhbGN1bGF0ZSBob3cgbWFueSB5ZWFycyBlYWNoIG9ic2VydmFpdG9uIHdhcyBpbiB0aGUgc3R1ZHkuIApkZnRvdGFsJHllYXJzX2luX3N0dWR5IDwtIGFzLm51bWVyaWMoZGlmZnRpbWUKICAgICAgICAgICAgICAgICAgICAgICAgICAoZGZ0b3RhbCRlbmRfaW5jaWRlbmNlLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRmdG90YWwkc3RhcnRfc3R1ZHksIHVuaXRzPSdkYXlzJykpIC8gMzY1LjI1CgpgYGAKCgpgYGB7cn0KI21ha2luZyBJUiB3aXRoIDk1JSBDSSAKSVJfOTVfQ0kgPC0gZnVuY3Rpb24oZXZlbnRzLCBweSwgTil7CiAgdG1wIDwtIGFzLm1hdHJpeChjYmluZChldmVudHMsIHB5KSkKICBjb25mX2ludHMgPC0gcm91bmQoZXBpLmNvbmYodG1wLCBjdHlwZSA9ICJpbmMucmF0ZSIsIG1ldGhvZCA9ICJleGFjdCIsIE4gPSBOLCBkZXNpZ24gPSAxLCAKICAgY29uZi5sZXZlbCA9IDAuOTUpICogMTAwMCwgMikKICByZXR1cm4oY29uZl9pbnRzKQp9CmBgYAoKPCEtLSBVbG0gSyAoMTk5MCkuIEEgc2ltcGxlIG1ldGhvZCB0byBjYWxjdWxhdGUgdGhlIGNvbmZpZGVuY2UgaW50ZXJ2YWwgb2YgYSBzdGFuZGFyZGl6ZWQgbW9ydGFsaXR5IHJhdGlvLiBBbWVyaWNhbiBKb3VybmFsIG9mIEVwaWRlbWlvbG9neSAxMzE6IDM3MyAtIDM3NSAtLT4KCgoKYGBge3J9CiN0b3RhbCBQWSBpbiBzdHVkeSBwZXJpb2QKVFBZIDwtIHN1bShkZnRvdGFsJHllYXJzX2luX3N0dWR5KQoKI2NhbGN1bGF0ZSB0aGUgYW1vdW50IG9mIGFuYXBoIHNob2NrcyBQb3NzaWJsZSBpbiBzdHVkeSBwZXJpb2QgClRORV9hbmFwaFAgPC0gZGZ0b3RhbCAlPiUgCiAgZmlsdGVyKERpYWdub3NpcyA9PSAnYW5hcGh5bF9wb3NzaWJsZScpICU+JSBucm93KCkKCiMgSW5jaWRlbmNlIFJhdGUgZm9yIGFuYXBoIHNob2NrIHBvc3NpYmxlIGluIHN0dWR5IHBlcmlvZCAKCgppcm9fYW5hcGhQIDwtICBJUl85NV9DSShUTkVfYW5hcGhQLCBUUFksIG5yb3coZGF0YSkpCgoKI2NhbGN1bGF0ZSB0aGUgYW1vdW50IG9mIGFuYXBoIHNob2NrcyBuYXJyb3cgaW4gc3R1ZHkgcGVyaW9kIApUTkVfYW5hcGhOIDwtIGRmdG90YWwgJT4lIAogIGZpbHRlcihEaWFnbm9zaXMgPT0gJ2FuYXBoeWxfbmFycm93JykgJT4lIG5yb3coKQoKIyBJUiBmb3IgYW5hcGggc2hvY2sgbmFycm93IGluIHN0dWR5IHBlcmlvZAppcm9fYW5hcGhOIDwtIElSXzk1X0NJKFRORV9hbmFwaE4sIFRQWSwgbnJvdyhkYXRhKSkKCiMgYW1vdW50IG9mIGdicyBjYXNlcyBpbiBzdHVkeSBwZXJpb2QKVE5FX2dicyA8LSBkZnRvdGFsICU+JSAKICBmaWx0ZXIoRGlhZ25vc2lzID09ICdnYnNfbmFycm93JykgJT4lIG5yb3coKQoKIyBJUiBmb3IgZ2JzIGluIHN0dWR5IHBlcmlvZAppcm9fZ2JzIDwtIElSXzk1X0NJKFRORV9nYnMsIFRQWSwgbnJvdyhkYXRhKSkKYGBgCgoKCgpgYGB7cn0KIyBBZGQgZm9yIGV2ZXJ5IG9ic2VydmF0aW9ucyB3aXRoIGFuIGV2ZW50IHRoZSBkYXRlIG9mIHRoZSBldmVudCBpbiB0aGUgZGF0YXNldC4gCmRmdG90YWwkZW5kX2luY2lkZW5jZV8yMDE3IDwtIGFzLkRhdGUoeW1kKGRmdG90YWwkZW5kX2RhdGVfcmVjb3JkKSkgCiMgZm9yIGV2ZXJ5IG9ic2VydnRpb24gd2hvIGRvZXMgbm90IGhhdmUgYW4gZXZlbnQsIG1ha2Ugc3VyZSB0aGVzZSB3aWxsIGdldCB0aGUgc3RhcnQgb2YgMjAxOCBhcyBlbmQgZGF0ZSwgc2luY2Ugd2Ugd2FudCB0byBjYWxjdWxhdGUgdGhlIElSIGZvciAyMDE3CmRmdG90YWwkZW5kX2luY2lkZW5jZV8yMDE3W2lzLm5hKGRmdG90YWwkZW5kX2luY2lkZW5jZV8yMDE3KV0gPC0gYXMuRGF0ZSh5bWQoMjAxODAxMDEpKQoKIyBJZiBvYnNlcnZhdGlvbiBoYXMgYW4gZXZlbnQgYWZ0ZXIgMjAxNywgaXQgd2lsbCBiZWNvbWUgdGhlIGVuZCBvZiB0aGUgb2JzIHBlcmlvZCAoMjAxOC0wMS0wMSkKZGZ0b3RhbCRlbmRfaW5jaWRlbmNlXzIwMTcgPC0gYXMuRGF0ZShpZmVsc2UoeWVhcihkZnRvdGFsJGVuZF9pbmNpZGVuY2VfMjAxNykgPiAyMDE3LCBhcy5EYXRlKCIyMDE4LTAxLTAxIiksIGRmdG90YWwkZW5kX2luY2lkZW5jZV8yMDE3KSwgb3JpZ2luID0gIjE5NzAtMDEtMDEiKQpgYGAKCgoKYGBge3J9CiMgTWFrZSBlbmQgaW5jaWRlbmNlIGZvciBldmVyeSB5ZWFyCmRmXzIwMTggPC0gCiAgZGZ0b3RhbCAlPiUgCiAgZmlsdGVyKCF5ZWFyKGVuZF9pbmNpZGVuY2UpID09IDIwMTcpCgpkZl8yMDE5IDwtIAogIGRmXzIwMTggJT4lIAogIGZpbHRlcigheWVhcihlbmRfaW5jaWRlbmNlKSA9PSAyMDE4KQoKZGZfMjAyMCA8LSAKICBkZl8yMDE5ICU+JSAKICBmaWx0ZXIoIXllYXIoZW5kX2luY2lkZW5jZSkgPT0gMjAxOSkKCmRmXzIwMjEgPC0gCiAgZGZfMjAyMCAlPiUgCiAgZmlsdGVyKCF5ZWFyKGVuZF9pbmNpZGVuY2UpID09IDIwMjApIAoKCgpgYGAKCgoKYGBge3J9CiMgY2FsY3VsYXRlIGZvciBlYWNoIGluZGl2aWR1YWwgdGhlIHB5IG9ic2VydmVkIGluIDIwMTcuIApkZnRvdGFsJHllYXJzX2luX3N0dWR5XzIwMTcgPC0gYXMubnVtZXJpYyhkaWZmdGltZQogICAgICAgICAgICAgICAgICAgICAgICAgIChkZnRvdGFsJGVuZF9pbmNpZGVuY2VfMjAxNywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZnRvdGFsJHN0YXJ0X3N0dWR5LCB1bml0cz0nZGF5cycpKSAvIDM2NQpgYGAKCgpgYGB7cn0KIyBDYWxjdWxhdGUgdGhlIGV2ZW50cyBpbiAyMDE3CmV2ZW50c18yMDE3IDwtIHN1YnNldChkZnRvdGFsLCB5ZWFyKGVuZF9pbmNpZGVuY2UpID09IDIwMTcpIAoKI3RoZSBUb3RhbCBwZXJzb255ZWFycyBmb3IgYW4gZXZlbnQgaW4gMjAxNwpUUFlfMjAxNyA8LSBzdW0oZGZ0b3RhbCR5ZWFyc19pbl9zdHVkeV8yMDE3KQoKIyBDb3VudCB0aGUgYW1vdW50IG9mIGFuYXBoeWwgcG9zc2libGUgc2hvY2tzIGluIDIwMTcgClRORV9hbmFwaFBfMjAxNyA8LSBldmVudHNfMjAxNyAlPiUgCiAgZmlsdGVyKERpYWdub3NpcyA9PSAnYW5hcGh5bF9wb3NzaWJsZScpICU+JSBucm93KCkKCiMgY2FsY3VsYXRlIHRoZSBJUiBpbiAxMDAwIFBZIGZvciBhbmFwaHlsIHBvc3NpYmxlIGluIDIwMTcKaXJvX2FuYXBoUF8yMDE3IDwtIElSXzk1X0NJKFRORV9hbmFwaFBfMjAxNywgVFBZXzIwMTcsIG5yb3coZGZfdG90YWwpKQoKCiMgQ291bnQgdGhlIGFtb3VudCBvZiBhbmFwaHlsIHNob2NrcyBuYXJyb3cgaW4gMjAxNyAKVE5FX2FuYXBoTl8yMDE3IDwtIGV2ZW50c18yMDE3ICU+JSAKICBmaWx0ZXIoRGlhZ25vc2lzID09ICdhbmFwaHlsX25hcnJvdycpICU+JSBucm93KCkKCiMgY2FsY3VsYXRlIHRoZSBJUiBpbiAxMDAwIFBZIGZvciBhbmFwaHlsIG5hcnJvdyBpbiAyMDE3Cmlyb19hbmFwaE5fMjAxNyA8LSBJUl85NV9DSShUTkVfYW5hcGhOXzIwMTcsIFRQWV8yMDE3LCBucm93KGRmX3RvdGFsKSkKCiMgQ291bnQgdGhlIGFtb3VudCBvZiBnYnMgaW4gMjAxNyAKVE5FX2dic18yMDE3IDwtIGV2ZW50c18yMDE3ICU+JSAKICBmaWx0ZXIoRGlhZ25vc2lzID09ICdnYnNfbmFycm93JykgJT4lIG5yb3coKQoKIyBjYWxjdWxhdGUgdGhlIElSIGluIDEwMDAgUFkgZm9yIGdicyBpbiAyMDE3Cmlyb19nYnNfMjAxNyA8LSBJUl85NV9DSShUTkVfZ2JzXzIwMTcsIFRQWV8yMDE3LCBucm93KGRmX3RvdGFsKSkKYGBgCgoKCmBgYHtyfQojIGZvciBldmVyeSBvYnNlcnZhdGlvbiB3aG8gaGFzIGFuIGV2ZW50IHB1dCBpbiB0aGUgZGF0ZS4gCmRmXzIwMTgkZW5kX2luY2lkZW5jZV8yMDE4IDwtIGFzLkRhdGUoeW1kKGRmXzIwMTgkZW5kX2RhdGVfcmVjb3JkKSkKCiNmb3IgZXZlcnlib2R5IHdobyBkb2VzIG5vdCBoYXZlIGFuIGV2ZW50LCBtYWtlIHN1cmUgdGhlIGVuZCBvZiBpbmNpZGVuY2UgaXMgMDEtMDEtMjAxOS4gCmRmXzIwMTgkZW5kX2luY2lkZW5jZV8yMDE4W2lzLm5hKGRmXzIwMTgkZW5kX2luY2lkZW5jZV8yMDE4KV0gPC0gYXMuRGF0ZSh5bWQoMjAxOTAxMDEpKQoKIyBJZiBhbiBvYnNlcnZhdGlvbiBoYXMgdGhlIGV2ZW50IGFmdGVyIDIwMTgsIHRoZSBlbmQgb2YgdGhlIG9ic2VydmF0aW9uIHdpbGwgYmUgMDEtMDEtMjAxOQpkZl8yMDE4JGVuZF9pbmNpZGVuY2VfMjAxOCA8LSBhcy5EYXRlKGlmZWxzZSh5ZWFyKGRmXzIwMTgkZW5kX2luY2lkZW5jZV8yMDE4KSA+IDIwMTgsIGFzLkRhdGUoIjIwMTktMDEtMDEiKSwgZGZfMjAxOCRlbmRfaW5jaWRlbmNlXzIwMTgpLCBvcmlnaW4gPSAiMTk3MC0wMS0wMSIpCmRmXzIwMTgkc3RhcnRfaW5jaWRlbmNlXzIwMTggPC0gYXMuRGF0ZSh5bWQoMjAxODAxMDEpKQoKIyBDb3VudCB0aGUgcGVyc29uIHllYXJzIG9mIHRoZSBvYnNlcnZhdGlvbiBpbiAyMDE4CmRmXzIwMTgkeWVhcnNfaW5fc3R1ZHlfMjAxOCA8LSBhcy5udW1lcmljKGRpZmZ0aW1lCiAgICAgICAgICAgICAgICAgICAgICAgICAgKGRmXzIwMTgkZW5kX2luY2lkZW5jZV8yMDE4LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRmXzIwMTgkc3RhcnRfaW5jaWRlbmNlXzIwMTgsIHVuaXRzPSdkYXlzJykpIC8gMzY1CgpgYGAKCgpgYGB7cn0KCiMgQWxsIHRoZSBldmVudHMgaW4gMjAxOCBpbiBhIG5ldyBkYXRhc2V0CmV2ZW50c18yMDE4IDwtIHN1YnNldChkZnRvdGFsLCB5ZWFyKGVuZF9pbmNpZGVuY2UpID09IDIwMTgpIAoKIyBUb3RhbCBwZXJzb24geWVhcnMgb2JzZXJ2ZWQgaW4gMjAxOApUUFlfMjAxOCA8LSBzdW0oZGZfMjAxOCR5ZWFyc19pbl9zdHVkeV8yMDE4KQoKIyBBbW91bnQgb2YgZXZlbnRzIG9mIGFuYXBoeWxhdGljIHNob2NrIHBvc3NpYmxlIGluIDIwMTggClRORV9hbmFwaFBfMjAxOCA8LSBldmVudHNfMjAxOCAlPiUgCiAgZmlsdGVyKERpYWdub3NpcyA9PSAnYW5hcGh5bF9wb3NzaWJsZScpICU+JSBucm93KCkKCiMgSW5jaWRlbmNlIHJhdGUgaW4gMTAwMCBQWSBmb3IgYW5hcGhhbHl0aWMgc2hvY2sgcG9zc2libGUgaW4gMjAxOAppcm9fYW5hcGhQXzIwMTggPC0gSVJfOTVfQ0koVE5FX2FuYXBoUF8yMDE4LCBUUFlfMjAxOCwgbnJvdyhkZl8yMDE4KSkKCgojIEFtb3VudCBvZiBldmVudHMgb2YgYW5hcGh5bGF0aWMgc2hvY2sgbmFycm93IGluIDIwMTggClRORV9hbmFwaE5fMjAxOCA8LSBldmVudHNfMjAxOCAlPiUgCiAgZmlsdGVyKERpYWdub3NpcyA9PSAnYW5hcGh5bF9uYXJyb3cnKSAlPiUgbnJvdygpCgojIElSIGluIDEwMDAgUFkgZm9yIGFuYXBoYWx5dGljIHNob2NrIG5hcm9vdyBpbiAyMDE4Cmlyb19hbmFwaE5fMjAxOCA8LSAgSVJfOTVfQ0koVE5FX2FuYXBoTl8yMDE4LCBUUFlfMjAxOCwgbnJvdyhkZl8yMDE4KSkKCgojIEFtb3VudCBvZiBldmVudHMgb2YgR0JTIGluIDIwMTggClRORV9nYnNfMjAxOCA8LSBldmVudHNfMjAxOCAlPiUgCiAgZmlsdGVyKERpYWdub3NpcyA9PSAnZ2JzX25hcnJvdycpICU+JSBucm93KCkKCiNJUiBmb3IgZ2JzIGluIDEwMDAgUFkKaXJvX2dic18yMDE4IDwtICBJUl85NV9DSShUTkVfZ2JzXzIwMTgsIFRQWV8yMDE4LCBucm93KGRmXzIwMTgpKQpgYGAKCgoKCmBgYHtyfQojIGZvciBldmVyeSBvYnNlcnZhdGlvbiB3aG8gaGFzIGFuIGV2ZW50IHB1dCBpbiB0aGUgZGF0ZS4gCmRmXzIwMTkkZW5kX2luY2lkZW5jZV8yMDE5IDwtIGFzLkRhdGUoeW1kKGRmXzIwMTkkZW5kX2RhdGVfcmVjb3JkKSkKCiNmb3IgZXZlcnlib2R5IHdobyBkb2VzIG5vdCBoYXZlIGFuIGV2ZW50LCBtYWtlIHN1cmUgdGhlIGVuZCBvZiBpbmNpZGVuY2UgaXMgMDEtMDEtMjAxOS4gCmRmXzIwMTkkZW5kX2luY2lkZW5jZV8yMDE5W2lzLm5hKGRmXzIwMTkkZW5kX2luY2lkZW5jZV8yMDE5KV0gPC0gYXMuRGF0ZSh5bWQoMjAyMDAxMDEpKQoKIyBJZiBhbiBvYnNlcnZhdGlvbiBoYXMgdGhlIGV2ZW50IGFmdGVyIDIwMTgsIHRoZSBlbmQgb2YgdGhlIG9ic2VydmF0aW9uIHdpbGwgYmUgMDEtMDEtMjAxOQpkZl8yMDE5JGVuZF9pbmNpZGVuY2VfMjAxOSA8LSBhcy5EYXRlKGlmZWxzZSh5ZWFyKGRmXzIwMTkkZW5kX2luY2lkZW5jZV8yMDE5KSA+IDIwMTksIGFzLkRhdGUoIjIwMjAtMDEtMDEiKSwgZGZfMjAxOSRlbmRfaW5jaWRlbmNlXzIwMTkpLCBvcmlnaW4gPSAiMTk3MC0wMS0wMSIpCmRmXzIwMTkkc3RhcnRfaW5jaWRlbmNlXzIwMTkgPC0gYXMuRGF0ZSh5bWQoMjAxOTAxMDEpKQoKIyBDb3VudCB0aGUgcGVyc29uIHllYXJzIG9mIHRoZSBvYnNlcnZhdGlvbiBpbiAyMDE4CmRmXzIwMTkkeWVhcnNfaW5fc3R1ZHlfMjAxOSA8LSBhcy5udW1lcmljKGRpZmZ0aW1lCiAgICAgICAgICAgICAgICAgICAgICAgICAgKGRmXzIwMTkkZW5kX2luY2lkZW5jZV8yMDE5LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRmXzIwMTkkc3RhcnRfaW5jaWRlbmNlXzIwMTksIHVuaXRzPSdkYXlzJykpIC8gMzY1CgpgYGAKCgpgYGB7cn0KCiMgQWxsIHRoZSBldmVudHMgaW4gMjAxOSBpbiBhIG5ldyBkYXRhc2V0CmV2ZW50c18yMDE5IDwtIHN1YnNldChkZnRvdGFsLCB5ZWFyKGVuZF9pbmNpZGVuY2UpID09IDIwMTkpIAoKIyBUb3RhbCBwZXJzb24geWVhcnMgb2JzZXJ2ZWQgaW4gMjAxOQpUUFlfMjAxOSA8LSBzdW0oZGZfMjAxOSR5ZWFyc19pbl9zdHVkeV8yMDE5KQoKIyBBbW91bnQgb2YgZXZlbnRzIG9mIGFuYXBoeWxhdGljIHNob2NrIHBvc3NpYmxlIGluIDIwMTkgClRORV9hbmFwaFBfMjAxOSA8LSBldmVudHNfMjAxOSAlPiUgCiAgZmlsdGVyKERpYWdub3NpcyA9PSAnYW5hcGh5bF9wb3NzaWJsZScpICU+JSBucm93KCkKCiMgSW5jaWRlbmNlIHJhdGUgaW4gMTAwMCBQWSBmb3IgYW5hcGhhbHl0aWMgc2hvY2sgcG9zc2libGUgaW4gMjAxOQppcm9fYW5hcGhQXzIwMTkgPC0gIElSXzk1X0NJKFRORV9hbmFwaFBfMjAxOSwgVFBZXzIwMTksIG5yb3coZGZfMjAxOSkpCgoKIyBBbW91bnQgb2YgZXZlbnRzIG9mIGFuYXBoeWxhdGljIHNob2NrIG5hcnJvdyBpbiAyMDE5IApUTkVfYW5hcGhOXzIwMTkgPC0gZXZlbnRzXzIwMTkgJT4lIAogIGZpbHRlcihEaWFnbm9zaXMgPT0gJ2FuYXBoeWxfbmFycm93JykgJT4lIG5yb3coKQoKIyBJUiBpbiAxMDAwIFBZIGZvciBhbmFwaGFseXRpYyBzaG9jayBuYXJvb3cgaW4gMjAxOQppcm9fYW5hcGhOXzIwMTkgPC0gSVJfOTVfQ0koVE5FX2FuYXBoTl8yMDE5LCBUUFlfMjAxOSwgbnJvdyhkZl8yMDE5KSkKCgojIEFtb3VudCBvZiBldmVudHMgb2YgR0JTIGluIDIwMTkgClRORV9nYnNfMjAxOSA8LSBldmVudHNfMjAxOSAlPiUgCiAgZmlsdGVyKERpYWdub3NpcyA9PSAnZ2JzX25hcnJvdycpICU+JSBucm93KCkKCiNJUiBmb3IgZ2JzIGluIDEwMDAgUFkKaXJvX2dic18yMDE5IDwtIElSXzk1X0NJKFRORV9nYnNfMjAxOSwgVFBZXzIwMTksIG5yb3coZGZfMjAxOSkpCmBgYAoKCmBgYHtyfQojIGZvciBldmVyeSBvYnNlcnZhdGlvbiB3aG8gaGFzIGFuIGV2ZW50IHB1dCBpbiB0aGUgZGF0ZS4gCmRmXzIwMjAkZW5kX2luY2lkZW5jZV8yMDIwIDwtIGFzLkRhdGUoeW1kKGRmXzIwMjAkZW5kX2RhdGVfcmVjb3JkKSkKCiNmb3IgZXZlcnlib2R5IHdobyBkb2VzIG5vdCBoYXZlIGFuIGV2ZW50LCBtYWtlIHN1cmUgdGhlIGVuZCBvZiBpbmNpZGVuY2UgaXMgMDEtMDEtMjAyMS4gCmRmXzIwMjAkZW5kX2luY2lkZW5jZV8yMDIwW2lzLm5hKGRmXzIwMjAkZW5kX2luY2lkZW5jZV8yMDIwKV0gPC0gYXMuRGF0ZSh5bWQoMjAyMTAxMDEpKQoKIyBJZiBhbiBvYnNlcnZhdGlvbiBoYXMgdGhlIGV2ZW50IGFmdGVyIDIwMTgsIHRoZSBlbmQgb2YgdGhlIG9ic2VydmF0aW9uIHdpbGwgYmUgMDEtMDEtMjAyMApkZl8yMDIwJGVuZF9pbmNpZGVuY2VfMjAyMCA8LSBhcy5EYXRlKGlmZWxzZSh5ZWFyKGRmXzIwMjAkZW5kX2luY2lkZW5jZV8yMDIwKSA+IDIwMjAsIGFzLkRhdGUoIjIwMjEtMDEtMDEiKSwgZGZfMjAyMCRlbmRfaW5jaWRlbmNlXzIwMjApLCBvcmlnaW4gPSAiMTk3MC0wMS0wMSIpCmRmXzIwMjAkc3RhcnRfaW5jaWRlbmNlXzIwMjAgPC0gYXMuRGF0ZSh5bWQoMjAyMDAxMDEpKQoKIyBDb3VudCB0aGUgcGVyc29uIHllYXJzIG9mIHRoZSBvYnNlcnZhdGlvbiBpbiAyMDE4CmRmXzIwMjAkeWVhcnNfaW5fc3R1ZHlfMjAyMCA8LSBhcy5udW1lcmljKGRpZmZ0aW1lCiAgICAgICAgICAgICAgICAgICAgICAgICAgKGRmXzIwMjAkZW5kX2luY2lkZW5jZV8yMDIwLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRmXzIwMjAkc3RhcnRfaW5jaWRlbmNlXzIwMjAsIHVuaXRzPSdkYXlzJykpIC8gMzY2CgpgYGAKCgpgYGB7cn0KCiMgQWxsIHRoZSBldmVudHMgaW4gMjAyMCBpbiBhIG5ldyBkYXRhc2V0CmV2ZW50c18yMDIwIDwtIHN1YnNldChkZnRvdGFsLCB5ZWFyKGVuZF9pbmNpZGVuY2UpID09IDIwMjApIAoKIyBUb3RhbCBwZXJzb24geWVhcnMgb2JzZXJ2ZWQgaW4gMjAyMApUUFlfMjAyMCA8LSBzdW0oZGZfMjAyMCR5ZWFyc19pbl9zdHVkeV8yMDIwKQoKIyBBbW91bnQgb2YgZXZlbnRzIG9mIGFuYXBoeWxhdGljIHNob2NrIHBvc3NpYmxlIGluIDIwMjAgClRORV9hbmFwaFBfMjAyMCA8LSBldmVudHNfMjAyMCAlPiUgCiAgZmlsdGVyKERpYWdub3NpcyA9PSAnYW5hcGh5bF9wb3NzaWJsZScpICU+JSBucm93KCkKCiMgSW5jaWRlbmNlIHJhdGUgaW4gMTAwMCBQWSBmb3IgYW5hcGhhbHl0aWMgc2hvY2sgcG9zc2libGUgaW4gMjAyMAppcm9fYW5hcGhQXzIwMjAgPC0gSVJfOTVfQ0koVE5FX2FuYXBoUF8yMDIwLCBUUFlfMjAyMCwgbnJvdyhkZl8yMDIwKSkKCgojIEFtb3VudCBvZiBldmVudHMgb2YgYW5hcGh5bGF0aWMgc2hvY2sgbmFycm93IGluIDIwMjAgClRORV9hbmFwaE5fMjAyMCA8LSBldmVudHNfMjAyMCAlPiUgCiAgZmlsdGVyKERpYWdub3NpcyA9PSAnYW5hcGh5bF9uYXJyb3cnKSAlPiUgbnJvdygpCgojIElSIGluIDEwMDAgUFkgZm9yIGFuYXBoYWx5dGljIHNob2NrIG5hcm9vdyBpbiAyMDIwCmlyb19hbmFwaE5fMjAyMCA8LSBJUl85NV9DSShUTkVfYW5hcGhOXzIwMjAsIFRQWV8yMDIwLCBucm93KGRmXzIwMjApKQoKCiMgQW1vdW50IG9mIGV2ZW50cyBvZiBHQlMgaW4gMjAyMCAKVE5FX2dic18yMDIwIDwtIGV2ZW50c18yMDIwICU+JSAKICBmaWx0ZXIoRGlhZ25vc2lzID09ICdnYnNfbmFycm93JykgJT4lIG5yb3coKQoKI0lSIGZvciBnYnMgaW4gMTAwMCBQWQppcm9fZ2JzXzIwMjAgPC0gSVJfOTVfQ0koVE5FX2dic18yMDIwLCBUUFlfMjAyMCwgbnJvdyhkZl8yMDIwKSkKYGBgCgoKYGBge3J9CkRpYWdub3NpcyA8LSBjKCdhbmFwaHlsYXhpc19uYXJyb3cnLCAnYW5hcGh5bGF4aXNfbmFycm93JywgJ2FuYXBoeWxheGlzX25hcnJvdycsICdhbmFwaHlsYXhpc19uYXJyb3cnLCdhbmFwaHlsYXhpc19uYXJyb3cnLCAnYW5hcGh5bGF4aXNfcG9zc2libGUnLCAnYW5hcGh5bGF4aXNfcG9zc2libGUnLCAnYW5hcGh5bGF4aXNfcG9zc2libGUnLCAnYW5hcGh5bGF4aXNfcG9zc2libGUnLCAnYW5hcGh5bGF4aXNfcG9zc2libGUnLCAnZ2JzX25hcnJvdycsICdnYnNfbmFycm93JywgJ2dic19uYXJyb3cnLCAnZ2JzX25hcnJvdycsICdnYnNfbmFycm93JykKWWVhcnMgPC0gYygnVG90YWwnLCAnMjAxNycsICcyMDE4JywgJzIwMTknLCAnMjAyMCcsCiAgICAgICAgICAgJ1RvdGFsJywgJzIwMTcnLCAnMjAxOCcsICcyMDE5JywgJzIwMjAnLAogICAgICAgICAgICdUb3RhbCcsICcyMDE3JywgJzIwMTgnLCAnMjAxOScsICcyMDIwJykKCklSIDwtIGMoaXJvX2FuYXBoTiwgaXJvX2FuYXBoTl8yMDE3LCBpcm9fYW5hcGhOXzIwMTgsIGlyb19hbmFwaE5fMjAxOSwgaXJvX2FuYXBoTl8yMDIwLCBpcm9fYW5hcGhQLAogICAgICAgIGlyb19hbmFwaFBfMjAxNywgaXJvX2FuYXBoUF8yMDE4LCBpcm9fYW5hcGhQXzIwMTksIGlyb19hbmFwaFBfMjAyMCwgaXJvX2dicywgaXJvX2dic18yMDE3LCBpcm9fZ2JzXzIwMTgsIGlyb19nYnNfMjAxOSwgaXJvX2dic18yMDIwKQoKCnRhYiA8LSBkYXRhLmZyYW1lKERpYWdub3NpcyA9IERpYWdub3NpcywgWWVhciA9IFllYXJzLCAnSVIgcGVyIDEwMDAgcHknID0gSVIpCmBgYAoKCmBgYHtyfQoKbWFrZV95ZWFyX2FnZV9iYW5kcyA8LSBmdW5jdGlvbihkYXRhLCBhZ2VfZ3JvdXApIHsKICBuZXdfZGF0YSA8LSBkYXRhICU+JSAKICAgIGZpbHRlcihhZ2VfYmFuZHM9PWFnZV9ncm91cCkgCiAgcmV0dXJuKG5ld19kYXRhKQogIH0KCgpkZnRvdGFsMDAxOSA8LSBtYWtlX3llYXJfYWdlX2JhbmRzKGRmdG90YWwsICdbMCwxOV0nKQpkZnRvdGFsMjAzOSA8LSBtYWtlX3llYXJfYWdlX2JhbmRzKGRmdG90YWwsICdbMjAsMzldJykKZGZ0b3RhbDQwNTkgPC0gbWFrZV95ZWFyX2FnZV9iYW5kcyhkZnRvdGFsLCAnWzQwLDU5XScpCmRmdG90YWw2MDc5IDwtIG1ha2VfeWVhcl9hZ2VfYmFuZHMoZGZ0b3RhbCwgJ1s2MCw3OV0nKQpkZnRvdGFsODAgPC0gbWFrZV95ZWFyX2FnZV9iYW5kcyhkZnRvdGFsLCAnWzgwK10nKQoKYGBgCgoKYGBge3J9CiMgTWFrZSBmdW5jdGlvbiB0byBjYWxjdWxhdGUgYW1vdW50IG9mIGV2ZW50cwphbW91bnRfZXZlbnRzIDwtIGZ1bmN0aW9uKGRhdGEsIGRpYWduKSB7CiAgZXZlbnRzIDwtIGRhdGEgJT4lIAogICAgZmlsdGVyKERpYWdub3NpcyA9PSBkaWFnbikgJT4lICBucm93KCkKICByZXR1cm4oZXZlbnRzKQp9CmBgYAoKCmBgYHtyfQojdG90YWwgcGVyc29ueWVhcnMgaW4gc3R1ZHkgZm9yIGFnZWJhbmQgMC0xOQpUUFkwMDE5IDwtIHN1bShkZnRvdGFsMDAxOSR5ZWFyc19pbl9zdHVkeSkKIyBhbW91bnQgb2YgZXZlbnRzIGZvciBlYWNoIGV2ZW50IGZvciBhZ2VfYmFuZCAwLTE5ClRORV9hbmFwaFAwMDE5IDwtIGFtb3VudF9ldmVudHMoZGZ0b3RhbDAwMTksICdhbmFwaHlsX3Bvc3NpYmxlJykKVE5FX2FuYXBoTjAwMTkgPC0gYW1vdW50X2V2ZW50cyhkZnRvdGFsMDAxOSwgJ2FuYXBoeWxfbmFycm93JykKVE5FX2diczAwMTkgPC0gYW1vdW50X2V2ZW50cyhkZnRvdGFsMDAxOSwgJ2dic19uYXJyb3cnKQoKI0lSIGZvciBlYWNoIGV2ZW50IGluIDEwMDBQWSBmb3IgYWdlX2JhbmQgMC0xOSAKaXJvX2FuYXBoUDAwMTkgPC0gSVJfOTVfQ0koVE5FX2FuYXBoUDAwMTksIFRQWTAwMTksIG5yb3coZGZ0b3RhbDAwMTkpKQppcm9fYW5hcGhOMDAxOSA8LSBJUl85NV9DSShUTkVfYW5hcGhOMDAxOSwgVFBZMDAxOSwgbnJvdyhkZnRvdGFsMDAxOSkpCmlyb19nYnMwMDE5IDwtIElSXzk1X0NJKFRORV9nYnMwMDE5LCBUUFkwMDE5LCBucm93KGRmdG90YWwwMDE5KSkKYGBgCgpgYGB7cn0KI3RvdGFsIHBlcnNvbnllYXJzIGluIHN0dWR5IGZvciBhZ2ViYW5kIDIwLTM5ClRQWTIwMzkgPC0gc3VtKGRmdG90YWwyMDM5JHllYXJzX2luX3N0dWR5KQojIGFtb3VudCBvZiBldmVudHMgZm9yIGVhY2ggZXZlbnQgZm9yIGFnZV9iYW5kIDIwLTM5ClRORV9hbmFwaFAyMDM5IDwtIGFtb3VudF9ldmVudHMoZGZ0b3RhbDIwMzksICdhbmFwaHlsX3Bvc3NpYmxlJykKVE5FX2FuYXBoTjIwMzkgPC0gYW1vdW50X2V2ZW50cyhkZnRvdGFsMjAzOSwgJ2FuYXBoeWxfbmFycm93JykKVE5FX2diczIwMzkgPC0gYW1vdW50X2V2ZW50cyhkZnRvdGFsMjAzOSwgJ2dic19uYXJyb3cnKQoKI0lSIGZvciBlYWNoIGV2ZW50IGluIDEwMDBQWSBmb3IgYWdlX2JhbmQgMjAtMzkgCmlyb19hbmFwaFAyMDM5IDwtIElSXzk1X0NJKFRORV9hbmFwaFAyMDM5LCBUUFkyMDM5LCBucm93KGRmdG90YWwyMDM5KSkKaXJvX2FuYXBoTjIwMzkgPC0gSVJfOTVfQ0koVE5FX2FuYXBoTjIwMzksIFRQWTIwMzksIG5yb3coZGZ0b3RhbDIwMzkpKQppcm9fZ2JzMjAzOSA8LSBJUl85NV9DSShUTkVfZ2JzMjAzOSwgVFBZMjAzOSwgbnJvdyhkZnRvdGFsMjAzOSkpCmBgYAoKYGBge3J9CiN0b3RhbCBwZXJzb255ZWFycyBpbiBzdHVkeSBmb3IgYWdlYmFuZCAwLTE5ClRQWTQwNTkgPC0gc3VtKGRmdG90YWw0MDU5JHllYXJzX2luX3N0dWR5KQojIGFtb3VudCBvZiBldmVudHMgZm9yIGVhY2ggZXZlbnQgZm9yIGFnZV9iYW5kIDAtMTkKVE5FX2FuYXBoUDQwNTkgPC0gYW1vdW50X2V2ZW50cyhkZnRvdGFsNDA1OSwgJ2FuYXBoeWxfcG9zc2libGUnKQpUTkVfYW5hcGhONDA1OSA8LSBhbW91bnRfZXZlbnRzKGRmdG90YWw0MDU5LCAnYW5hcGh5bF9uYXJyb3cnKQpUTkVfZ2JzNDA1OSA8LSBhbW91bnRfZXZlbnRzKGRmdG90YWw0MDU5LCAnZ2JzX25hcnJvdycpCgojSVIgZm9yIGVhY2ggZXZlbnQgaW4gMTAwMFBZIGZvciBhZ2VfYmFuZCAwLTE5IAppcm9fYW5hcGhQNDA1OSA8LSBJUl85NV9DSShUTkVfYW5hcGhQNDA1OSwgVFBZNDA1OSwgbnJvdyhkZnRvdGFsNDA1OSkpCmlyb19hbmFwaE40MDU5IDwtIElSXzk1X0NJKFRORV9hbmFwaE40MDU5LCBUUFk0MDU5LCBucm93KGRmdG90YWw0MDU5KSkKaXJvX2diczQwNTkgPC0gSVJfOTVfQ0koVE5FX2diczQwNTksIFRQWTQwNTksIG5yb3coZGZ0b3RhbDQwNTkpKQpgYGAKCmBgYHtyfQojdG90YWwgcGVyc29ueWVhcnMgaW4gc3R1ZHkgZm9yIGFnZWJhbmQgMC0xOQpUUFk2MDc5IDwtIHN1bShkZnRvdGFsNjA3OSR5ZWFyc19pbl9zdHVkeSkKIyBhbW91bnQgb2YgZXZlbnRzIGZvciBlYWNoIGV2ZW50IGZvciBhZ2VfYmFuZCAwLTE5ClRORV9hbmFwaFA2MDc5IDwtIGFtb3VudF9ldmVudHMoZGZ0b3RhbDYwNzksICdhbmFwaHlsX3Bvc3NpYmxlJykKVE5FX2FuYXBoTjYwNzkgPC0gYW1vdW50X2V2ZW50cyhkZnRvdGFsNjA3OSwgJ2FuYXBoeWxfbmFycm93JykKVE5FX2diczYwNzkgPC0gYW1vdW50X2V2ZW50cyhkZnRvdGFsNjA3OSwgJ2dic19uYXJyb3cnKQoKI0lSIGZvciBlYWNoIGV2ZW50IGluIDEwMDBQWSBmb3IgYWdlX2JhbmQgMC0xOSAKaXJvX2FuYXBoUDYwNzkgPC0gSVJfOTVfQ0koVE5FX2FuYXBoUDYwNzksIFRQWTYwNzksIG5yb3coZGZ0b3RhbDYwNzkpKQppcm9fYW5hcGhONjA3OSA8LSBJUl85NV9DSShUTkVfYW5hcGhONjA3OSwgVFBZNjA3OSwgbnJvdyhkZnRvdGFsNjA3OSkpCmlyb19nYnM2MDc5IDwtIElSXzk1X0NJKFRORV9nYnM2MDc5LCBUUFk2MDc5LCBucm93KGRmdG90YWw2MDc5KSkKYGBgCgoKCmBgYHtyfQojRXZlbnRzIGluIDIwMTcgZm9yIGFnZSBncm91cCAwMC0xOQpldmVudHNfMjAxN18wMDE5IDwtIHN1YnNldChkZnRvdGFsMDAxOSwgeWVhcihlbmRfaW5jaWRlbmNlKSA9PSAyMDE3KSAKI3RoZSBUb3RhbCBwZXJzb255ZWFycyBmb3IgYW4gZXZlbnQgaW4gMjAxNyBhZ2VfYmFuZDAwMTkKVFBZXzIwMTdfMDAxOSA8LSBzdW0oZGZ0b3RhbDAwMTkkeWVhcnNfaW5fc3R1ZHlfMjAxNykKCiMgQ291bnQgdGhlbnVtYmVyIG9mIGV2ZW50cyBmb3IgYWdlX2JhbmQgMDAxOSBpbiAyMDE3ClRORV9hbmFwaFBfMDAxOV8yMDE3IDwtIGFtb3VudF9ldmVudHMoZXZlbnRzXzIwMTdfMDAxOSwgJ2FuYXBoeWxfcG9zc2libGUnKQpUTkVfYW5hcGhOXzAwMTlfMjAxNyA8LSBhbW91bnRfZXZlbnRzKGV2ZW50c18yMDE3XzAwMTksICdhbmFwaHlsX25hcnJvdycpClRORV9nYnNfMDAxOV8yMDE3IDwtIGFtb3VudF9ldmVudHMoZXZlbnRzXzIwMTdfMDAxOSwgJ2dic19uYXJyb3cnKQoKI0lSIGZvciBlYWNoIGV2ZW50IGluIDEwMDBQWSBmb3IgYWdlX2JhbmQgMC0xOSAKaXJvX2FuYXBoUF8wMDE5XzIwMTcgPC0gSVJfOTVfQ0koVE5FX2FuYXBoUF8wMDE5XzIwMTcsIFRQWV8yMDE3XzAwMTksIG5yb3coZGZ0b3RhbDAwMTkpKQppcm9fYW5hcGhOXzAwMTlfMjAxNyA8LSBJUl85NV9DSShUTkVfYW5hcGhOXzAwMTlfMjAxNywgVFBZXzIwMTdfMDAxOSwgbnJvdyhkZnRvdGFsMDAxOSkpCmlyb19nYnNfMDAxOV8yMDE3IDwtIElSXzk1X0NJKFRORV9nYnNfMDAxOV8yMDE3LCBUUFlfMjAxN18wMDE5LCBucm93KGRmdG90YWwwMDE5KSkKYGBgCgpgYGB7cn0KI0V2ZW50cyBpbiAyMDE3IGZvciBhZ2UgZ3JvdXAgMDAtMTkKZXZlbnRzXzIwMTdfMjAzOSA8LSBzdWJzZXQoZGZ0b3RhbDIwMzksIHllYXIoZW5kX2luY2lkZW5jZSkgPT0gMjAxNykgCiN0aGUgVG90YWwgcGVyc29ueWVhcnMgZm9yIGFuIGV2ZW50IGluIDIwMTcgYWdlX2JhbmQyMDM5ClRQWV8yMDE3XzIwMzkgPC0gc3VtKGRmdG90YWwyMDM5JHllYXJzX2luX3N0dWR5XzIwMTcpCgojIENvdW50IHRoZW51bWJlciBvZiBldmVudHMgZm9yIGFnZV9iYW5kIDIwMzkgaW4gMjAxNwpUTkVfYW5hcGhQXzIwMzlfMjAxNyA8LSBhbW91bnRfZXZlbnRzKGV2ZW50c18yMDE3XzIwMzksICdhbmFwaHlsX3Bvc3NpYmxlJykKVE5FX2FuYXBoTl8yMDM5XzIwMTcgPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAxN18yMDM5LCAnYW5hcGh5bF9uYXJyb3cnKQpUTkVfZ2JzXzIwMzlfMjAxNyA8LSBhbW91bnRfZXZlbnRzKGV2ZW50c18yMDE3XzIwMzksICdnYnNfbmFycm93JykKCiNJUiBmb3IgZWFjaCBldmVudCBpbiAxMDAwUFkgZm9yIGFnZV9iYW5kIDAtMTkgCmlyb19hbmFwaFBfMjAzOV8yMDE3IDwtIElSXzk1X0NJKFRORV9hbmFwaFBfMjAzOV8yMDE3LCBUUFlfMjAxN18yMDM5LCBucm93KGRmdG90YWwyMDM5KSkKaXJvX2FuYXBoTl8yMDM5XzIwMTcgPC0gSVJfOTVfQ0koVE5FX2FuYXBoTl8yMDM5XzIwMTcsIFRQWV8yMDE3XzIwMzksIG5yb3coZGZ0b3RhbDIwMzkpKQppcm9fZ2JzXzIwMzlfMjAxNyA8LSBJUl85NV9DSShUTkVfZ2JzXzIwMzlfMjAxNywgVFBZXzIwMTdfMjAzOSwgbnJvdyhkZnRvdGFsMjAzOSkpCmBgYAoKYGBge3J9CiNFdmVudHMgaW4gMjAxNyBmb3IgYWdlIGdyb3VwIDAwLTE5CmV2ZW50c18yMDE3XzQwNTkgPC0gc3Vic2V0KGRmdG90YWw0MDU5LCB5ZWFyKGVuZF9pbmNpZGVuY2UpID09IDIwMTcpIAojdGhlIFRvdGFsIHBlcnNvbnllYXJzIGZvciBhbiBldmVudCBpbiAyMDE3IGFnZV9iYW5kNDA1OQpUUFlfMjAxN180MDU5IDwtIHN1bShkZnRvdGFsNDA1OSR5ZWFyc19pbl9zdHVkeV8yMDE3KQoKIyBDb3VudCB0aGVudW1iZXIgb2YgZXZlbnRzIGZvciBhZ2VfYmFuZCA0MDU5IGluIDIwMTcKVE5FX2FuYXBoUF80MDU5XzIwMTcgPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAxN180MDU5LCAnYW5hcGh5bF9wb3NzaWJsZScpClRORV9hbmFwaE5fNDA1OV8yMDE3IDwtIGFtb3VudF9ldmVudHMoZXZlbnRzXzIwMTdfNDA1OSwgJ2FuYXBoeWxfbmFycm93JykKVE5FX2dic180MDU5XzIwMTcgPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAxN180MDU5LCAnZ2JzX25hcnJvdycpCgojSVIgZm9yIGVhY2ggZXZlbnQgaW4gMTAwMFBZIGZvciBhZ2VfYmFuZCAwLTE5IAppcm9fYW5hcGhQXzQwNTlfMjAxNyA8LSBJUl85NV9DSShUTkVfYW5hcGhQXzQwNTlfMjAxNywgVFBZXzIwMTdfNDA1OSwgbnJvdyhkZnRvdGFsNDA1OSkpCmlyb19hbmFwaE5fNDA1OV8yMDE3IDwtIElSXzk1X0NJKFRORV9hbmFwaE5fNDA1OV8yMDE3LCBUUFlfMjAxN180MDU5LCBucm93KGRmdG90YWw0MDU5KSkKaXJvX2dic180MDU5XzIwMTcgPC0gSVJfOTVfQ0koVE5FX2dic180MDU5XzIwMTcsIFRQWV8yMDE3XzQwNTksIG5yb3coZGZ0b3RhbDQwNTkpKQpgYGAKCmBgYHtyfQojRXZlbnRzIGluIDIwMTcgZm9yIGFnZSBncm91cCAwMC0xOQpldmVudHNfMjAxN182MDc5IDwtIHN1YnNldChkZnRvdGFsNjA3OSwgeWVhcihlbmRfaW5jaWRlbmNlKSA9PSAyMDE3KSAKI3RoZSBUb3RhbCBwZXJzb255ZWFycyBmb3IgYW4gZXZlbnQgaW4gMjAxNyBhZ2VfYmFuZDYwNzkKVFBZXzIwMTdfNjA3OSA8LSBzdW0oZGZ0b3RhbDYwNzkkeWVhcnNfaW5fc3R1ZHlfMjAxNykKCiMgQ291bnQgdGhlbnVtYmVyIG9mIGV2ZW50cyBmb3IgYWdlX2JhbmQgNjA3OSBpbiAyMDE3ClRORV9hbmFwaFBfNjA3OV8yMDE3IDwtIGFtb3VudF9ldmVudHMoZXZlbnRzXzIwMTdfNjA3OSwgJ2FuYXBoeWxfcG9zc2libGUnKQpUTkVfYW5hcGhOXzYwNzlfMjAxNyA8LSBhbW91bnRfZXZlbnRzKGV2ZW50c18yMDE3XzYwNzksICdhbmFwaHlsX25hcnJvdycpClRORV9nYnNfNjA3OV8yMDE3IDwtIGFtb3VudF9ldmVudHMoZXZlbnRzXzIwMTdfNjA3OSwgJ2dic19uYXJyb3cnKQoKI0lSIGZvciBlYWNoIGV2ZW50IGluIDEwMDBQWSBmb3IgYWdlX2JhbmQgMC0xOSAKaXJvX2FuYXBoUF82MDc5XzIwMTcgPC0gSVJfOTVfQ0koVE5FX2FuYXBoUF82MDc5XzIwMTcsIFRQWV8yMDE3XzYwNzksIG5yb3coZGZ0b3RhbDYwNzkpKQppcm9fYW5hcGhOXzYwNzlfMjAxNyA8LSBJUl85NV9DSShUTkVfYW5hcGhOXzYwNzlfMjAxNywgVFBZXzIwMTdfNjA3OSwgbnJvdyhkZnRvdGFsNjA3OSkpCmlyb19nYnNfNjA3OV8yMDE3IDwtIElSXzk1X0NJKFRORV9nYnNfNjA3OV8yMDE3LCBUUFlfMjAxN182MDc5LCBucm93KGRmdG90YWw2MDc5KSkKYGBgCgoKCmBgYHtyfQpkZl8yMDE4XzAwMTkgPC0gbWFrZV95ZWFyX2FnZV9iYW5kcyhkZl8yMDE4LCAnWzAsMTldJykKZGZfMjAxOF8yMDM5IDwtIG1ha2VfeWVhcl9hZ2VfYmFuZHMoZGZfMjAxOCwgJ1syMCwzOV0nKQpkZl8yMDE4XzQwNTkgPC0gbWFrZV95ZWFyX2FnZV9iYW5kcyhkZl8yMDE4LCAnWzQwLDU5XScpCmRmXzIwMThfNjA3OSA8LSBtYWtlX3llYXJfYWdlX2JhbmRzKGRmXzIwMTgsICdbNjAsNzldJykKYGBgCgoKYGBge3J9CiNFdmVudHMgaW4gMjAxNyBmb3IgYWdlIGdyb3VwIDAwLTE5CmV2ZW50c18yMDE4XzAwMTkgPC0gc3Vic2V0KGRmXzIwMThfMDAxOSwgeWVhcihlbmRfaW5jaWRlbmNlKSA9PSAyMDE4KSAKI3RoZSBfMjAxOF8gcGVyc29ueWVhcnMgZm9yIGFuIGV2ZW50IGluIDIwMTggYWdlX2JhbmQwMDE5ClRQWV8yMDE4XzAwMTkgPC0gc3VtKGRmXzIwMThfMDAxOSR5ZWFyc19pbl9zdHVkeV8yMDE4KQoKIyBDb3VudCB0aGVudW1iZXIgb2YgZXZlbnRzIGZvciBhZ2VfYmFuZCAwMDE5IGluIDIwMTgKVE5FX2FuYXBoUF8wMDE5XzIwMTggPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAxOF8wMDE5LCAnYW5hcGh5bF9wb3NzaWJsZScpClRORV9hbmFwaE5fMDAxOV8yMDE4IDwtIGFtb3VudF9ldmVudHMoZXZlbnRzXzIwMThfMDAxOSwgJ2FuYXBoeWxfbmFycm93JykKVE5FX2dic18wMDE5XzIwMTggPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAxOF8wMDE5LCAnZ2JzX25hcnJvdycpCgojSVIgZm9yIGVhY2ggZXZlbnQgaW4gMTAwMFBZIGZvciBhZ2VfYmFuZCAwLTE5IAppcm9fYW5hcGhQXzAwMTlfMjAxOCA8LSBJUl85NV9DSShUTkVfYW5hcGhQXzAwMTlfMjAxOCwgVFBZXzIwMThfMDAxOSwgbnJvdyhkZl8yMDE4XzAwMTkpKQppcm9fYW5hcGhOXzAwMTlfMjAxOCA8LSBJUl85NV9DSShUTkVfYW5hcGhOXzAwMTlfMjAxOCwgVFBZXzIwMThfMDAxOSwgbnJvdyhkZl8yMDE4XzAwMTkpKQppcm9fZ2JzXzAwMTlfMjAxOCA8LSBJUl85NV9DSShUTkVfZ2JzXzAwMTlfMjAxOCwgVFBZXzIwMThfMDAxOSwgbnJvdyhkZl8yMDE4XzAwMTkpKQpgYGAKCmBgYHtyfQojRXZlbnRzIGluIDIwMTggZm9yIGFnZSBncm91cCAwMC0xOQpldmVudHNfMjAxOF8yMDM5IDwtIHN1YnNldChkZl8yMDE4XzIwMzksIHllYXIoZW5kX2luY2lkZW5jZSkgPT0gMjAxOCkgCiN0aGUgXzIwMThfIHBlcnNvbnllYXJzIGZvciBhbiBldmVudCBpbiAyMDE4IGFnZV9iYW5kMjAzOQpUUFlfMjAxOF8yMDM5IDwtIHN1bShkZl8yMDE4XzIwMzkkeWVhcnNfaW5fc3R1ZHlfMjAxOCkKCiMgQ291bnQgdGhlbnVtYmVyIG9mIGV2ZW50cyBmb3IgYWdlX2JhbmQgMjAzOSBpbiAyMDE4ClRORV9hbmFwaFBfMjAzOV8yMDE4IDwtIGFtb3VudF9ldmVudHMoZXZlbnRzXzIwMThfMjAzOSwgJ2FuYXBoeWxfcG9zc2libGUnKQpUTkVfYW5hcGhOXzIwMzlfMjAxOCA8LSBhbW91bnRfZXZlbnRzKGV2ZW50c18yMDE4XzIwMzksICdhbmFwaHlsX25hcnJvdycpClRORV9nYnNfMjAzOV8yMDE4IDwtIGFtb3VudF9ldmVudHMoZXZlbnRzXzIwMThfMjAzOSwgJ2dic19uYXJyb3cnKQoKI0lSIGZvciBlYWNoIGV2ZW50IGluIDEwMDBQWSBmb3IgYWdlX2JhbmQgMC0xOSAKaXJvX2FuYXBoUF8yMDM5XzIwMTggPC0gSVJfOTVfQ0koVE5FX2FuYXBoUF8yMDM5XzIwMTgsIFRQWV8yMDE4XzIwMzksIG5yb3coZGZfMjAxOF8yMDM5KSkKaXJvX2FuYXBoTl8yMDM5XzIwMTggPC0gSVJfOTVfQ0koVE5FX2FuYXBoTl8yMDM5XzIwMTgsIFRQWV8yMDE4XzIwMzksIG5yb3coZGZfMjAxOF8yMDM5KSkKaXJvX2dic18yMDM5XzIwMTggPC0gSVJfOTVfQ0koVE5FX2dic18yMDM5XzIwMTgsIFRQWV8yMDE4XzIwMzksIG5yb3coZGZfMjAxOF8yMDM5KSkKYGBgCgpgYGB7cn0KI0V2ZW50cyBpbiAyMDE4IGZvciBhZ2UgZ3JvdXAgMDAtMTkKZXZlbnRzXzIwMThfNDA1OSA8LSBzdWJzZXQoZGZfMjAxOF80MDU5LCB5ZWFyKGVuZF9pbmNpZGVuY2UpID09IDIwMTgpIAojdGhlIF8yMDE4XyBwZXJzb255ZWFycyBmb3IgYW4gZXZlbnQgaW4gMjAxOCBhZ2VfYmFuZDQwNTkKVFBZXzIwMThfNDA1OSA8LSBzdW0oZGZfMjAxOF80MDU5JHllYXJzX2luX3N0dWR5XzIwMTgpCgojIENvdW50IHRoZW51bWJlciBvZiBldmVudHMgZm9yIGFnZV9iYW5kIDQwNTkgaW4gMjAxOApUTkVfYW5hcGhQXzQwNTlfMjAxOCA8LSBhbW91bnRfZXZlbnRzKGV2ZW50c18yMDE4XzQwNTksICdhbmFwaHlsX3Bvc3NpYmxlJykKVE5FX2FuYXBoTl80MDU5XzIwMTggPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAxOF80MDU5LCAnYW5hcGh5bF9uYXJyb3cnKQpUTkVfZ2JzXzQwNTlfMjAxOCA8LSBhbW91bnRfZXZlbnRzKGV2ZW50c18yMDE4XzQwNTksICdnYnNfbmFycm93JykKCiNJUiBmb3IgZWFjaCBldmVudCBpbiAxMDAwUFkgZm9yIGFnZV9iYW5kIDAtMTkgCmlyb19hbmFwaFBfNDA1OV8yMDE4IDwtIElSXzk1X0NJKFRORV9hbmFwaFBfNDA1OV8yMDE4LCBUUFlfMjAxOF80MDU5LCBucm93KGRmXzIwMThfNDA1OSkpCmlyb19hbmFwaE5fNDA1OV8yMDE4IDwtIElSXzk1X0NJKFRORV9hbmFwaE5fNDA1OV8yMDE4LCBUUFlfMjAxOF80MDU5LCBucm93KGRmXzIwMThfNDA1OSkpCmlyb19nYnNfNDA1OV8yMDE4IDwtIElSXzk1X0NJKFRORV9nYnNfNDA1OV8yMDE4LCBUUFlfMjAxOF80MDU5LCBucm93KGRmXzIwMThfNDA1OSkpCmBgYAoKYGBge3J9CiNFdmVudHMgaW4gMjAxOCBmb3IgYWdlIGdyb3VwIDAwLTE5CmV2ZW50c18yMDE4XzYwNzkgPC0gc3Vic2V0KGRmXzIwMThfNjA3OSwgeWVhcihlbmRfaW5jaWRlbmNlKSA9PSAyMDE4KSAKI3RoZSBfMjAxOF8gcGVyc29ueWVhcnMgZm9yIGFuIGV2ZW50IGluIDIwMTggYWdlX2JhbmQ2MDc5ClRQWV8yMDE4XzYwNzkgPC0gc3VtKGRmXzIwMThfNjA3OSR5ZWFyc19pbl9zdHVkeV8yMDE4KQoKIyBDb3VudCB0aGVudW1iZXIgb2YgZXZlbnRzIGZvciBhZ2VfYmFuZCA2MDc5IGluIDIwMTgKVE5FX2FuYXBoUF82MDc5XzIwMTggPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAxOF82MDc5LCAnYW5hcGh5bF9wb3NzaWJsZScpClRORV9hbmFwaE5fNjA3OV8yMDE4IDwtIGFtb3VudF9ldmVudHMoZXZlbnRzXzIwMThfNjA3OSwgJ2FuYXBoeWxfbmFycm93JykKVE5FX2dic182MDc5XzIwMTggPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAxOF82MDc5LCAnZ2JzX25hcnJvdycpCgojSVIgZm9yIGVhY2ggZXZlbnQgaW4gMTAwMFBZIGZvciBhZ2VfYmFuZCAwLTE5IAppcm9fYW5hcGhQXzYwNzlfMjAxOCA8LSBJUl85NV9DSShUTkVfYW5hcGhQXzYwNzlfMjAxOCwgVFBZXzIwMThfNjA3OSwgbnJvdyhkZl8yMDE4XzYwNzkpKQppcm9fYW5hcGhOXzYwNzlfMjAxOCA8LSBJUl85NV9DSShUTkVfYW5hcGhOXzYwNzlfMjAxOCwgVFBZXzIwMThfNjA3OSwgbnJvdyhkZl8yMDE4XzYwNzkpKQppcm9fZ2JzXzYwNzlfMjAxOCA8LSBJUl85NV9DSShUTkVfZ2JzXzYwNzlfMjAxOCwgVFBZXzIwMThfNjA3OSwgbnJvdyhkZl8yMDE4XzYwNzkpKQpgYGAKCgoKYGBge3J9CmRmXzIwMTlfMDAxOSA8LSBtYWtlX3llYXJfYWdlX2JhbmRzKGRmXzIwMTksICdbMCwxOV0nKQpkZl8yMDE5XzIwMzkgPC0gbWFrZV95ZWFyX2FnZV9iYW5kcyhkZl8yMDE5LCAnWzIwLDM5XScpCmRmXzIwMTlfNDA1OSA8LSBtYWtlX3llYXJfYWdlX2JhbmRzKGRmXzIwMTksICdbNDAsNTldJykKZGZfMjAxOV82MDc5IDwtIG1ha2VfeWVhcl9hZ2VfYmFuZHMoZGZfMjAxOSwgJ1s2MCw3OV0nKQpgYGAKCgpgYGB7cn0KI0V2ZW50cyBpbiAyMDE3IGZvciBhZ2UgZ3JvdXAgMDAtMTkKZXZlbnRzXzIwMTlfMDAxOSA8LSBzdWJzZXQoZGZfMjAxOV8wMDE5LCB5ZWFyKGVuZF9pbmNpZGVuY2UpID09IDIwMTkpIAojdGhlIF8yMDE5XyBwZXJzb255ZWFycyBmb3IgYW4gZXZlbnQgaW4gMjAxOSBhZ2VfYmFuZDAwMTkKVFBZXzIwMTlfMDAxOSA8LSBzdW0oZGZfMjAxOV8wMDE5JHllYXJzX2luX3N0dWR5XzIwMTkpCgojIENvdW50IHRoZW51bWJlciBvZiBldmVudHMgZm9yIGFnZV9iYW5kIDAwMTkgaW4gMjAxOQpUTkVfYW5hcGhQXzAwMTlfMjAxOSA8LSBhbW91bnRfZXZlbnRzKGV2ZW50c18yMDE5XzAwMTksICdhbmFwaHlsX3Bvc3NpYmxlJykKVE5FX2FuYXBoTl8wMDE5XzIwMTkgPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAxOV8wMDE5LCAnYW5hcGh5bF9uYXJyb3cnKQpUTkVfZ2JzXzAwMTlfMjAxOSA8LSBhbW91bnRfZXZlbnRzKGV2ZW50c18yMDE5XzAwMTksICdnYnNfbmFycm93JykKCiNJUiBmb3IgZWFjaCBldmVudCBpbiAxMDAwUFkgZm9yIGFnZV9iYW5kIDAtMTkgCmlyb19hbmFwaFBfMDAxOV8yMDE5IDwtIElSXzk1X0NJKFRORV9hbmFwaFBfMDAxOV8yMDE5LCBUUFlfMjAxOV8wMDE5LCBucm93KGRmXzIwMTlfMDAxOSkpCmlyb19hbmFwaE5fMDAxOV8yMDE5IDwtIElSXzk1X0NJKFRORV9hbmFwaE5fMDAxOV8yMDE5LCBUUFlfMjAxOV8wMDE5LCBucm93KGRmXzIwMTlfMDAxOSkpCmlyb19nYnNfMDAxOV8yMDE5IDwtIElSXzk1X0NJKFRORV9nYnNfMDAxOV8yMDE5LCBUUFlfMjAxOV8wMDE5LCBucm93KGRmXzIwMTlfMDAxOSkpCmBgYAoKYGBge3J9CiNFdmVudHMgaW4gMjAxOSBmb3IgYWdlIGdyb3VwIDAwLTE5CmV2ZW50c18yMDE5XzIwMzkgPC0gc3Vic2V0KGRmXzIwMTlfMjAzOSwgeWVhcihlbmRfaW5jaWRlbmNlKSA9PSAyMDE5KSAKI3RoZSBfMjAxOV8gcGVyc29ueWVhcnMgZm9yIGFuIGV2ZW50IGluIDIwMTkgYWdlX2JhbmQyMDM5ClRQWV8yMDE5XzIwMzkgPC0gc3VtKGRmXzIwMTlfMjAzOSR5ZWFyc19pbl9zdHVkeV8yMDE5KQoKIyBDb3VudCB0aGVudW1iZXIgb2YgZXZlbnRzIGZvciBhZ2VfYmFuZCAyMDM5IGluIDIwMTkKVE5FX2FuYXBoUF8yMDM5XzIwMTkgPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAxOV8yMDM5LCAnYW5hcGh5bF9wb3NzaWJsZScpClRORV9hbmFwaE5fMjAzOV8yMDE5IDwtIGFtb3VudF9ldmVudHMoZXZlbnRzXzIwMTlfMjAzOSwgJ2FuYXBoeWxfbmFycm93JykKVE5FX2dic18yMDM5XzIwMTkgPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAxOV8yMDM5LCAnZ2JzX25hcnJvdycpCgojSVIgZm9yIGVhY2ggZXZlbnQgaW4gMTAwMFBZIGZvciBhZ2VfYmFuZCAwLTE5IAppcm9fYW5hcGhQXzIwMzlfMjAxOSA8LSBJUl85NV9DSShUTkVfYW5hcGhQXzIwMzlfMjAxOSwgVFBZXzIwMTlfMjAzOSwgbnJvdyhkZl8yMDE5XzIwMzkpKQppcm9fYW5hcGhOXzIwMzlfMjAxOSA8LSBJUl85NV9DSShUTkVfYW5hcGhOXzIwMzlfMjAxOSwgVFBZXzIwMTlfMjAzOSwgbnJvdyhkZl8yMDE5XzIwMzkpKQppcm9fZ2JzXzIwMzlfMjAxOSA8LSBJUl85NV9DSShUTkVfZ2JzXzIwMzlfMjAxOSwgVFBZXzIwMTlfMjAzOSwgbnJvdyhkZl8yMDE5XzIwMzkpKQpgYGAKCmBgYHtyfQojRXZlbnRzIGluIDIwMTkgZm9yIGFnZSBncm91cCAwMC0xOQpldmVudHNfMjAxOV80MDU5IDwtIHN1YnNldChkZl8yMDE5XzQwNTksIHllYXIoZW5kX2luY2lkZW5jZSkgPT0gMjAxOSkgCiN0aGUgXzIwMTlfIHBlcnNvbnllYXJzIGZvciBhbiBldmVudCBpbiAyMDE5IGFnZV9iYW5kNDA1OQpUUFlfMjAxOV80MDU5IDwtIHN1bShkZl8yMDE5XzQwNTkkeWVhcnNfaW5fc3R1ZHlfMjAxOSkKCiMgQ291bnQgdGhlbnVtYmVyIG9mIGV2ZW50cyBmb3IgYWdlX2JhbmQgNDA1OSBpbiAyMDE5ClRORV9hbmFwaFBfNDA1OV8yMDE5IDwtIGFtb3VudF9ldmVudHMoZXZlbnRzXzIwMTlfNDA1OSwgJ2FuYXBoeWxfcG9zc2libGUnKQpUTkVfYW5hcGhOXzQwNTlfMjAxOSA8LSBhbW91bnRfZXZlbnRzKGV2ZW50c18yMDE5XzQwNTksICdhbmFwaHlsX25hcnJvdycpClRORV9nYnNfNDA1OV8yMDE5IDwtIGFtb3VudF9ldmVudHMoZXZlbnRzXzIwMTlfNDA1OSwgJ2dic19uYXJyb3cnKQoKI0lSIGZvciBlYWNoIGV2ZW50IGluIDEwMDBQWSBmb3IgYWdlX2JhbmQgMC0xOSAKaXJvX2FuYXBoUF80MDU5XzIwMTkgPC0gSVJfOTVfQ0koVE5FX2FuYXBoUF80MDU5XzIwMTksIFRQWV8yMDE5XzQwNTksIG5yb3coZGZfMjAxOV80MDU5KSkKaXJvX2FuYXBoTl80MDU5XzIwMTkgPC0gSVJfOTVfQ0koVE5FX2FuYXBoTl80MDU5XzIwMTksIFRQWV8yMDE5XzQwNTksIG5yb3coZGZfMjAxOV80MDU5KSkKaXJvX2dic180MDU5XzIwMTkgPC0gSVJfOTVfQ0koVE5FX2dic180MDU5XzIwMTksIFRQWV8yMDE5XzQwNTksIG5yb3coZGZfMjAxOV80MDU5KSkKYGBgCgpgYGB7cn0KI0V2ZW50cyBpbiAyMDE5IGZvciBhZ2UgZ3JvdXAgMDAtMTkKZXZlbnRzXzIwMTlfNjA3OSA8LSBzdWJzZXQoZGZfMjAxOV82MDc5LCB5ZWFyKGVuZF9pbmNpZGVuY2UpID09IDIwMTkpIAojdGhlIF8yMDE5XyBwZXJzb255ZWFycyBmb3IgYW4gZXZlbnQgaW4gMjAxOSBhZ2VfYmFuZDYwNzkKVFBZXzIwMTlfNjA3OSA8LSBzdW0oZGZfMjAxOV82MDc5JHllYXJzX2luX3N0dWR5XzIwMTkpCgojIENvdW50IHRoZW51bWJlciBvZiBldmVudHMgZm9yIGFnZV9iYW5kIDYwNzkgaW4gMjAxOQpUTkVfYW5hcGhQXzYwNzlfMjAxOSA8LSBhbW91bnRfZXZlbnRzKGV2ZW50c18yMDE5XzYwNzksICdhbmFwaHlsX3Bvc3NpYmxlJykKVE5FX2FuYXBoTl82MDc5XzIwMTkgPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAxOV82MDc5LCAnYW5hcGh5bF9uYXJyb3cnKQpUTkVfZ2JzXzYwNzlfMjAxOSA8LSBhbW91bnRfZXZlbnRzKGV2ZW50c18yMDE5XzYwNzksICdnYnNfbmFycm93JykKCiNJUiBmb3IgZWFjaCBldmVudCBpbiAxMDAwUFkgZm9yIGFnZV9iYW5kIDAtMTkgCmlyb19hbmFwaFBfNjA3OV8yMDE5IDwtIElSXzk1X0NJKFRORV9hbmFwaFBfNjA3OV8yMDE5LCBUUFlfMjAxOV82MDc5LCBucm93KGRmXzIwMTlfNjA3OSkpCmlyb19hbmFwaE5fNjA3OV8yMDE5IDwtIElSXzk1X0NJKFRORV9hbmFwaE5fNjA3OV8yMDE5LCBUUFlfMjAxOV82MDc5LCBucm93KGRmXzIwMTlfNjA3OSkpCmlyb19nYnNfNjA3OV8yMDE5IDwtIElSXzk1X0NJKFRORV9nYnNfNjA3OV8yMDE5LCBUUFlfMjAxOV82MDc5LCBucm93KGRmXzIwMTlfNjA3OSkpCmBgYAoKCgpgYGB7cn0KZGZfMjAyMF8wMDE5IDwtIG1ha2VfeWVhcl9hZ2VfYmFuZHMoZGZfMjAyMCwgJ1swLDE5XScpCmRmXzIwMjBfMjAzOSA8LSBtYWtlX3llYXJfYWdlX2JhbmRzKGRmXzIwMjAsICdbMjAsMzldJykKZGZfMjAyMF80MDU5IDwtIG1ha2VfeWVhcl9hZ2VfYmFuZHMoZGZfMjAyMCwgJ1s0MCw1OV0nKQpkZl8yMDIwXzYwNzkgPC0gbWFrZV95ZWFyX2FnZV9iYW5kcyhkZl8yMDIwLCAnWzYwLDc5XScpCmBgYAoKCmBgYHtyfQojRXZlbnRzIGluIDIwMTcgZm9yIGFnZSBncm91cCAwMC0xOQpldmVudHNfMjAyMF8wMDE5IDwtIHN1YnNldChkZl8yMDIwXzAwMTksIHllYXIoZW5kX2luY2lkZW5jZSkgPT0gMjAyMCkgCiN0aGUgXzIwMjBfIHBlcnNvbnllYXJzIGZvciBhbiBldmVudCBpbiAyMDIwIGFnZV9iYW5kMDAxOQpUUFlfMjAyMF8wMDE5IDwtIHN1bShkZl8yMDIwXzAwMTkkeWVhcnNfaW5fc3R1ZHlfMjAyMCkKCiMgQ291bnQgdGhlbnVtYmVyIG9mIGV2ZW50cyBmb3IgYWdlX2JhbmQgMDAxOSBpbiAyMDIwClRORV9hbmFwaFBfMDAxOV8yMDIwIDwtIGFtb3VudF9ldmVudHMoZXZlbnRzXzIwMjBfMDAxOSwgJ2FuYXBoeWxfcG9zc2libGUnKQpUTkVfYW5hcGhOXzAwMTlfMjAyMCA8LSBhbW91bnRfZXZlbnRzKGV2ZW50c18yMDIwXzAwMTksICdhbmFwaHlsX25hcnJvdycpClRORV9nYnNfMDAxOV8yMDIwIDwtIGFtb3VudF9ldmVudHMoZXZlbnRzXzIwMjBfMDAxOSwgJ2dic19uYXJyb3cnKQoKI0lSIGZvciBlYWNoIGV2ZW50IGluIDEwMDBQWSBmb3IgYWdlX2JhbmQgMC0xOSAKaXJvX2FuYXBoUF8wMDE5XzIwMjAgPC0gSVJfOTVfQ0koVE5FX2FuYXBoUF8wMDE5XzIwMjAsIFRQWV8yMDIwXzAwMTksIG5yb3coZGZfMjAyMF8wMDE5KSkKaXJvX2FuYXBoTl8wMDE5XzIwMjAgPC0gSVJfOTVfQ0koVE5FX2FuYXBoTl8wMDE5XzIwMjAsIFRQWV8yMDIwXzAwMTksIG5yb3coZGZfMjAyMF8wMDE5KSkKaXJvX2dic18wMDE5XzIwMjAgPC0gSVJfOTVfQ0koVE5FX2dic18wMDE5XzIwMjAsIFRQWV8yMDIwXzAwMTksIG5yb3coZGZfMjAyMF8wMDE5KSkKYGBgCgpgYGB7cn0KI0V2ZW50cyBpbiAyMDIwIGZvciBhZ2UgZ3JvdXAgMDAtMTkKZXZlbnRzXzIwMjBfMjAzOSA8LSBzdWJzZXQoZGZfMjAyMF8yMDM5LCB5ZWFyKGVuZF9pbmNpZGVuY2UpID09IDIwMjApIAojdGhlIF8yMDIwXyBwZXJzb255ZWFycyBmb3IgYW4gZXZlbnQgaW4gMjAyMCBhZ2VfYmFuZDIwMzkKVFBZXzIwMjBfMjAzOSA8LSBzdW0oZGZfMjAyMF8yMDM5JHllYXJzX2luX3N0dWR5XzIwMjApCgojIENvdW50IHRoZW51bWJlciBvZiBldmVudHMgZm9yIGFnZV9iYW5kIDIwMzkgaW4gMjAyMApUTkVfYW5hcGhQXzIwMzlfMjAyMCA8LSBhbW91bnRfZXZlbnRzKGV2ZW50c18yMDIwXzIwMzksICdhbmFwaHlsX3Bvc3NpYmxlJykKVE5FX2FuYXBoTl8yMDM5XzIwMjAgPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAyMF8yMDM5LCAnYW5hcGh5bF9uYXJyb3cnKQpUTkVfZ2JzXzIwMzlfMjAyMCA8LSBhbW91bnRfZXZlbnRzKGV2ZW50c18yMDIwXzIwMzksICdnYnNfbmFycm93JykKCiNJUiBmb3IgZWFjaCBldmVudCBpbiAxMDAwUFkgZm9yIGFnZV9iYW5kIDAtMTkgCmlyb19hbmFwaFBfMjAzOV8yMDIwIDwtIElSXzk1X0NJKFRORV9hbmFwaFBfMjAzOV8yMDIwLCBUUFlfMjAyMF8yMDM5LCBucm93KGRmXzIwMjBfMjAzOSkpCmlyb19hbmFwaE5fMjAzOV8yMDIwIDwtIElSXzk1X0NJKFRORV9hbmFwaE5fMjAzOV8yMDIwLCBUUFlfMjAyMF8yMDM5LCBucm93KGRmXzIwMjBfMjAzOSkpCmlyb19nYnNfMjAzOV8yMDIwIDwtIElSXzk1X0NJKFRORV9nYnNfMjAzOV8yMDIwLCBUUFlfMjAyMF8yMDM5LCBucm93KGRmXzIwMjBfMjAzOSkpCmBgYAoKYGBge3J9CiNFdmVudHMgaW4gMjAyMCBmb3IgYWdlIGdyb3VwIDAwLTE5CmV2ZW50c18yMDIwXzQwNTkgPC0gc3Vic2V0KGRmXzIwMjBfNDA1OSwgeWVhcihlbmRfaW5jaWRlbmNlKSA9PSAyMDIwKSAKI3RoZSBfMjAyMF8gcGVyc29ueWVhcnMgZm9yIGFuIGV2ZW50IGluIDIwMjAgYWdlX2JhbmQ0MDU5ClRQWV8yMDIwXzQwNTkgPC0gc3VtKGRmXzIwMjBfNDA1OSR5ZWFyc19pbl9zdHVkeV8yMDIwKQoKIyBDb3VudCB0aGVudW1iZXIgb2YgZXZlbnRzIGZvciBhZ2VfYmFuZCA0MDU5IGluIDIwMjAKVE5FX2FuYXBoUF80MDU5XzIwMjAgPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAyMF80MDU5LCAnYW5hcGh5bF9wb3NzaWJsZScpClRORV9hbmFwaE5fNDA1OV8yMDIwIDwtIGFtb3VudF9ldmVudHMoZXZlbnRzXzIwMjBfNDA1OSwgJ2FuYXBoeWxfbmFycm93JykKVE5FX2dic180MDU5XzIwMjAgPC0gYW1vdW50X2V2ZW50cyhldmVudHNfMjAyMF80MDU5LCAnZ2JzX25hcnJvdycpCgojSVIgZm9yIGVhY2ggZXZlbnQgaW4gMTAwMFBZIGZvciBhZ2VfYmFuZCAwLTE5IAppcm9fYW5hcGhQXzQwNTlfMjAyMCA8LSBJUl85NV9DSShUTkVfYW5hcGhQXzQwNTlfMjAyMCwgVFBZXzIwMjBfNDA1OSwgbnJvdyhkZl8yMDIwXzQwNTkpKQppcm9fYW5hcGhOXzQwNTlfMjAyMCA8LSBJUl85NV9DSShUTkVfYW5hcGhOXzQwNTlfMjAyMCwgVFBZXzIwMjBfNDA1OSwgbnJvdyhkZl8yMDIwXzQwNTkpKQppcm9fZ2JzXzQwNTlfMjAyMCA8LSBJUl85NV9DSShUTkVfZ2JzXzQwNTlfMjAyMCwgVFBZXzIwMjBfNDA1OSwgbnJvdyhkZl8yMDIwXzQwNTkpKQpgYGAKCmBgYHtyfQojRXZlbnRzIGluIDIwMjAgZm9yIGFnZSBncm91cCAwMC0xOQpldmVudHNfMjAyMF82MDc5IDwtIHN1YnNldChkZl8yMDIwXzYwNzksIHllYXIoZW5kX2luY2lkZW5jZSkgPT0gMjAyMCkgCiN0aGUgXzIwMjBfIHBlcnNvbnllYXJzIGZvciBhbiBldmVudCBpbiAyMDIwIGFnZV9iYW5kNjA3OQpUUFlfMjAyMF82MDc5IDwtIHN1bShkZl8yMDIwXzYwNzkkeWVhcnNfaW5fc3R1ZHlfMjAyMCkKCiMgQ291bnQgdGhlbnVtYmVyIG9mIGV2ZW50cyBmb3IgYWdlX2JhbmQgNjA3OSBpbiAyMDIwClRORV9hbmFwaFBfNjA3OV8yMDIwIDwtIGFtb3VudF9ldmVudHMoZXZlbnRzXzIwMjBfNjA3OSwgJ2FuYXBoeWxfcG9zc2libGUnKQpUTkVfYW5hcGhOXzYwNzlfMjAyMCA8LSBhbW91bnRfZXZlbnRzKGV2ZW50c18yMDIwXzYwNzksICdhbmFwaHlsX25hcnJvdycpClRORV9nYnNfNjA3OV8yMDIwIDwtIGFtb3VudF9ldmVudHMoZXZlbnRzXzIwMjBfNjA3OSwgJ2dic19uYXJyb3cnKQoKI0lSIGZvciBlYWNoIGV2ZW50IGluIDEwMDBQWSBmb3IgYWdlX2JhbmQgMC0xOSAKaXJvX2FuYXBoUF82MDc5XzIwMjAgPC0gSVJfOTVfQ0koVE5FX2FuYXBoUF82MDc5XzIwMjAsIFRQWV8yMDIwXzYwNzksIG5yb3coZGZfMjAyMF82MDc5KSkKaXJvX2FuYXBoTl82MDc5XzIwMjAgPC0gSVJfOTVfQ0koVE5FX2FuYXBoTl82MDc5XzIwMjAsIFRQWV8yMDIwXzYwNzksIG5yb3coZGZfMjAyMF82MDc5KSkKaXJvX2dic182MDc5XzIwMjAgPC0gSVJfOTVfQ0koVE5FX2dic182MDc5XzIwMjAsIFRQWV8yMDIwXzYwNzksIG5yb3coZGZfMjAyMF82MDc5KSkKYGBgCgoKCmBgYHtyfQpEaWFnMSA8LSByZXAoJ0FuYXBoeWxheGlzIG5hcnJvdycsIHRpbWVzPTI1KQpEaWFnMiA8LSByZXAoJ0FuYXBoeWxheGlzIHBvc3NpYmxlJywgdGltZXM9MjUpCkRpYWczIDwtIHJlcCgnZ2JzIG5hcnJvdycsIHRpbWVzPTI1KQphbGxfZGlhZyA8LSBjKERpYWcxLCBEaWFnMiwgRGlhZzMpCgphbGxfeWVhcnMgPC0gcmVwKGMoJ1RvdGFsJywgJzIwMTcnLCAnMjAxOCcsICcyMDE5JywgJzIwMjAnKSwgdGltZXM9MTUpCgpyZXBfdG90YWwgPC0gcmVwKCdUb3RhbCcsIHRpbWVzPTUpCnJlcF8wMDE5IDwtIHJlcCgnMC0xOScsIHRpbWVzPTUpCnJlcF8yMDM5IDwtIHJlcCgnMjAtMzknLCB0aW1lcz01KQpyZXBfNDA1OSA8LSByZXAoJzQwLTU5JywgdGltZXM9NSkKcmVwXzYwNzkgPC0gcmVwKCc2MC03OScsIHRpbWVzPTUpCgphbGxfYWdlcyA8LSByZXAoYyhyZXBfdG90YWwsIHJlcF8wMDE5LCByZXBfMjAzOSwgcmVwXzQwNTksIHJlcF82MDc5KSwgdGltZXM9MykKCgoKY291bnRfZXZlbnRzIDwtIGMoCiAgVE5FX2FuYXBoTiwgVE5FX2FuYXBoTl8yMDE3LCBUTkVfYW5hcGhOXzIwMTgsIAogIFRORV9hbmFwaE5fMjAxOSwgVE5FX2FuYXBoTl8yMDIwLCAKICBUTkVfYW5hcGhOMDAxOSwgVE5FX2FuYXBoTl8wMDE5XzIwMTcsIFRORV9hbmFwaE5fMDAxOV8yMDE4LAogIFRORV9hbmFwaE5fMDAxOV8yMDE5LCBUTkVfYW5hcGhOXzAwMTlfMjAyMCwgCiAgVE5FX2FuYXBoTjIwMzksIFRORV9hbmFwaE5fMjAzOV8yMDE3LCBUTkVfYW5hcGhOXzIwMzlfMjAxOCwKICBUTkVfYW5hcGhOXzIwMzlfMjAxOSwgVE5FX2FuYXBoTl8yMDM5XzIwMjAsCiAgVE5FX2FuYXBoTjQwNTksIFRORV9hbmFwaE5fNDA1OV8yMDE3LCBUTkVfYW5hcGhOXzQwNTlfMjAxOCwKICBUTkVfYW5hcGhOXzQwNTlfMjAxOSwgVE5FX2FuYXBoTl80MDU5XzIwMjAsCiAgVE5FX2FuYXBoTjYwNzksIFRORV9hbmFwaE5fNjA3OV8yMDE3LCBUTkVfYW5hcGhOXzYwNzlfMjAxOCwKICBUTkVfYW5hcGhOXzYwNzlfMjAxOSwgVE5FX2FuYXBoTl82MDc5XzIwMjAsCiAgIyMjIyBBbmFwaCBQb3NzaWJsZSAKICBUTkVfYW5hcGhQLCBUTkVfYW5hcGhQXzIwMTcsIFRORV9hbmFwaFBfMjAxOCwgCiAgVE5FX2FuYXBoUF8yMDE5LCBUTkVfYW5hcGhQXzIwMjAsIAogIFRORV9hbmFwaFAwMDE5LCBUTkVfYW5hcGhQXzAwMTlfMjAxNywgVE5FX2FuYXBoUF8wMDE5XzIwMTgsCiAgVE5FX2FuYXBoUF8wMDE5XzIwMTksIFRORV9hbmFwaFBfMDAxOV8yMDIwLCAKICBUTkVfYW5hcGhQMjAzOSwgVE5FX2FuYXBoUF8yMDM5XzIwMTcsIFRORV9hbmFwaFBfMjAzOV8yMDE4LAogIFRORV9hbmFwaFBfMjAzOV8yMDE5LCBUTkVfYW5hcGhQXzIwMzlfMjAyMCwKICBUTkVfYW5hcGhQNDA1OSwgVE5FX2FuYXBoUF80MDU5XzIwMTcsIFRORV9hbmFwaFBfNDA1OV8yMDE4LAogIFRORV9hbmFwaFBfNDA1OV8yMDE5LCBUTkVfYW5hcGhQXzQwNTlfMjAyMCwKICBUTkVfYW5hcGhQNjA3OSwgVE5FX2FuYXBoUF82MDc5XzIwMTcsIFRORV9hbmFwaFBfNjA3OV8yMDE4LAogIFRORV9hbmFwaFBfNjA3OV8yMDE5LCBUTkVfYW5hcGhQXzYwNzlfMjAyMCwKICAjIyMjIEdCUyAKICBUTkVfZ2JzLCBUTkVfZ2JzXzIwMTcsIFRORV9nYnNfMjAxOCwgCiAgVE5FX2dic18yMDE5LCBUTkVfZ2JzXzIwMjAsIAogIFRORV9nYnMwMDE5LCBUTkVfZ2JzXzAwMTlfMjAxNywgVE5FX2dic18wMDE5XzIwMTgsCiAgVE5FX2dic18wMDE5XzIwMTksIFRORV9nYnNfMDAxOV8yMDIwLCAKICBUTkVfZ2JzMjAzOSwgVE5FX2dic18yMDM5XzIwMTcsIFRORV9nYnNfMjAzOV8yMDE4LAogIFRORV9nYnNfMjAzOV8yMDE5LCBUTkVfZ2JzXzIwMzlfMjAyMCwKICBUTkVfZ2JzNDA1OSwgVE5FX2dic180MDU5XzIwMTcsIFRORV9nYnNfNDA1OV8yMDE4LAogIFRORV9nYnNfNDA1OV8yMDE5LCBUTkVfZ2JzXzQwNTlfMjAyMCwKICBUTkVfZ2JzNjA3OSwgVE5FX2dic182MDc5XzIwMTcsIFRORV9nYnNfNjA3OV8yMDE4LAogIFRORV9nYnNfNjA3OV8yMDE5LCBUTkVfZ2JzXzYwNzlfMjAyMAogICkKCgpQZXJzWWVhciA8LSBjKFRQWSwgVFBZXzIwMTcsIFRQWV8yMDE4LCAKICBUUFlfMjAxOSwgVFBZXzIwMjAsIAogIFRQWTAwMTksIFRQWV8yMDE3XzAwMTksIFRQWV8yMDE4XzAwMTksCiAgVFBZXzIwMTlfMDAxOSwgVFBZXzIwMjBfMDAxOSwgCiAgVFBZMjAzOSwgVFBZXzIwMTdfMjAzOSwgVFBZXzIwMThfMjAzOSwKICBUUFlfMjAxOV8yMDM5LCBUUFlfMjAyMF8yMDM5LAogIFRQWTQwNTksIFRQWV8yMDE3XzQwNTksIFRQWV8yMDE4XzQwNTksCiAgVFBZXzIwMTlfNDA1OSwgVFBZXzIwMjBfNDA1OSwKICBUUFk2MDc5LCBUUFlfMjAxN180MDU5LCBUUFlfMjAxOF80MDU5LAogIFRQWV8yMDE5XzQwNTksIFRQWV8yMDIwXzQwNTkpCgoKcGVyc195ZWFyX2FsbCA8LSByZXAoUGVyc1llYXIsIHRpbWVzPTMpCgpgYGAKCmBgYHtyfQpJUl8xMDAwUFkgPC0gIGFzLm51bWVyaWMoYygKICBpcm9fYW5hcGhOWzFdLCBpcm9fYW5hcGhOXzIwMTdbMV0sIGlyb19hbmFwaE5fMjAxOFsxXSwgCiAgaXJvX2FuYXBoTl8yMDE5WzFdLCBpcm9fYW5hcGhOXzIwMjBbMV0sIAogIGlyb19hbmFwaE4wMDE5WzFdLCBpcm9fYW5hcGhOXzAwMTlfMjAxN1sxXSwgaXJvX2FuYXBoTl8wMDE5XzIwMThbMV0sCiAgaXJvX2FuYXBoTl8wMDE5XzIwMTlbMV0sIGlyb19hbmFwaE5fMDAxOV8yMDIwWzFdLCAKICBpcm9fYW5hcGhOMjAzOVsxXSwgaXJvX2FuYXBoTl8yMDM5XzIwMTdbMV0sIGlyb19hbmFwaE5fMjAzOV8yMDE4WzFdLAogIGlyb19hbmFwaE5fMjAzOV8yMDE5WzFdLCBpcm9fYW5hcGhOXzIwMzlfMjAyMFsxXSwKICBpcm9fYW5hcGhONDA1OVsxXSwgaXJvX2FuYXBoTl80MDU5XzIwMTdbMV0sIGlyb19hbmFwaE5fNDA1OV8yMDE4WzFdLAogIGlyb19hbmFwaE5fNDA1OV8yMDE5WzFdLCBpcm9fYW5hcGhOXzQwNTlfMjAyMFsxXSwKICBpcm9fYW5hcGhONjA3OVsxXSwgaXJvX2FuYXBoTl82MDc5XzIwMTdbMV0sIGlyb19hbmFwaE5fNjA3OV8yMDE4WzFdLAogIGlyb19hbmFwaE5fNjA3OV8yMDE5WzFdLCBpcm9fYW5hcGhOXzYwNzlfMjAyMFsxXSwKICAjIyMjIEFuYXBoIFBvc3NpYmxlIAogIGlyb19hbmFwaFBbMV0sIGlyb19hbmFwaFBfMjAxN1sxXSwgaXJvX2FuYXBoUF8yMDE4WzFdLCAKICBpcm9fYW5hcGhQXzIwMTlbMV0sIGlyb19hbmFwaFBfMjAyMFsxXSwgCiAgaXJvX2FuYXBoUDAwMTlbMV0sIGlyb19hbmFwaFBfMDAxOV8yMDE3WzFdLCBpcm9fYW5hcGhQXzAwMTlfMjAxOFsxXSwKICBpcm9fYW5hcGhQXzAwMTlfMjAxOVsxXSwgaXJvX2FuYXBoUF8wMDE5XzIwMjBbMV0sIAogIGlyb19hbmFwaFAyMDM5WzFdLCBpcm9fYW5hcGhQXzIwMzlfMjAxN1sxXSwgaXJvX2FuYXBoUF8yMDM5XzIwMThbMV0sCiAgaXJvX2FuYXBoUF8yMDM5XzIwMTlbMV0sIGlyb19hbmFwaFBfMjAzOV8yMDIwWzFdLAogIGlyb19hbmFwaFA0MDU5WzFdLCBpcm9fYW5hcGhQXzQwNTlfMjAxN1sxXSwgaXJvX2FuYXBoUF80MDU5XzIwMThbMV0sCiAgaXJvX2FuYXBoUF80MDU5XzIwMTlbMV0sIGlyb19hbmFwaFBfNDA1OV8yMDIwWzFdLAogIGlyb19hbmFwaFA2MDc5WzFdLCBpcm9fYW5hcGhQXzYwNzlfMjAxN1sxXSwgaXJvX2FuYXBoUF82MDc5XzIwMThbMV0sCiAgaXJvX2FuYXBoUF82MDc5XzIwMTlbMV0sIGlyb19hbmFwaFBfNjA3OV8yMDIwWzFdLAogICMjIyMgR0JTIAogICAgaXJvX2dic1sxXSwgaXJvX2dic18yMDE3WzFdLCBpcm9fZ2JzXzIwMThbMV0sIAogIGlyb19nYnNfMjAxOVsxXSwgaXJvX2dic18yMDIwWzFdLCAKICBpcm9fZ2JzMDAxOVsxXSwgaXJvX2dic18wMDE5XzIwMTdbMV0sIGlyb19nYnNfMDAxOV8yMDE4WzFdLAogIGlyb19nYnNfMDAxOV8yMDE5WzFdLCBpcm9fZ2JzXzAwMTlfMjAyMFsxXSwgCiAgaXJvX2diczIwMzlbMV0sIGlyb19nYnNfMjAzOV8yMDE3WzFdLCBpcm9fZ2JzXzIwMzlfMjAxOFsxXSwKICBpcm9fZ2JzXzIwMzlfMjAxOVsxXSwgaXJvX2dic18yMDM5XzIwMjBbMV0sCiAgaXJvX2diczQwNTlbMV0sIGlyb19nYnNfNDA1OV8yMDE3WzFdLCBpcm9fZ2JzXzQwNTlfMjAxOFsxXSwKICBpcm9fZ2JzXzQwNTlfMjAxOVsxXSwgaXJvX2dic180MDU5XzIwMjBbMV0sCiAgaXJvX2diczYwNzlbMV0sIGlyb19nYnNfNjA3OV8yMDE3WzFdLCBpcm9fZ2JzXzYwNzlfMjAxOFsxXSwKICBpcm9fZ2JzXzYwNzlfMjAxOVsxXSwgaXJvX2dic182MDc5XzIwMjBbMV0KICApKQpgYGAKCmBgYHtyfQpJUl8xMDAwUFlfOTVMIDwtIGFzLm51bWVyaWMoYygKICBpcm9fYW5hcGhOWzJdLCBpcm9fYW5hcGhOXzIwMTdbMl0sIGlyb19hbmFwaE5fMjAxOFsyXSwgCiAgaXJvX2FuYXBoTl8yMDE5WzJdLCBpcm9fYW5hcGhOXzIwMjBbMl0sIAogIGlyb19hbmFwaE4wMDE5WzJdLCBpcm9fYW5hcGhOXzAwMTlfMjAxN1syXSwgaXJvX2FuYXBoTl8wMDE5XzIwMThbMl0sCiAgaXJvX2FuYXBoTl8wMDE5XzIwMTlbMl0sIGlyb19hbmFwaE5fMDAxOV8yMDIwWzJdLCAKICBpcm9fYW5hcGhOMjAzOVsyXSwgaXJvX2FuYXBoTl8yMDM5XzIwMTdbMl0sIGlyb19hbmFwaE5fMjAzOV8yMDE4WzJdLAogIGlyb19hbmFwaE5fMjAzOV8yMDE5WzJdLCBpcm9fYW5hcGhOXzIwMzlfMjAyMFsyXSwKICBpcm9fYW5hcGhONDA1OVsyXSwgaXJvX2FuYXBoTl80MDU5XzIwMTdbMl0sIGlyb19hbmFwaE5fNDA1OV8yMDE4WzJdLAogIGlyb19hbmFwaE5fNDA1OV8yMDE5WzJdLCBpcm9fYW5hcGhOXzQwNTlfMjAyMFsyXSwKICBpcm9fYW5hcGhONjA3OVsyXSwgaXJvX2FuYXBoTl82MDc5XzIwMTdbMl0sIGlyb19hbmFwaE5fNjA3OV8yMDE4WzJdLAogIGlyb19hbmFwaE5fNjA3OV8yMDE5WzJdLCBpcm9fYW5hcGhOXzYwNzlfMjAyMFsyXSwKICAjIyMjIEFuYXBoIFBvc3NpYmxlIAogIGlyb19hbmFwaFBbMl0sIGlyb19hbmFwaFBfMjAxN1syXSwgaXJvX2FuYXBoUF8yMDE4WzJdLCAKICBpcm9fYW5hcGhQXzIwMTlbMl0sIGlyb19hbmFwaFBfMjAyMFsyXSwgCiAgaXJvX2FuYXBoUDAwMTlbMl0sIGlyb19hbmFwaFBfMDAxOV8yMDE3WzJdLCBpcm9fYW5hcGhQXzAwMTlfMjAxOFsyXSwKICBpcm9fYW5hcGhQXzAwMTlfMjAxOVsyXSwgaXJvX2FuYXBoUF8wMDE5XzIwMjBbMl0sIAogIGlyb19hbmFwaFAyMDM5WzJdLCBpcm9fYW5hcGhQXzIwMzlfMjAxN1syXSwgaXJvX2FuYXBoUF8yMDM5XzIwMThbMl0sCiAgaXJvX2FuYXBoUF8yMDM5XzIwMTlbMl0sIGlyb19hbmFwaFBfMjAzOV8yMDIwWzJdLAogIGlyb19hbmFwaFA0MDU5WzJdLCBpcm9fYW5hcGhQXzQwNTlfMjAxN1syXSwgaXJvX2FuYXBoUF80MDU5XzIwMThbMl0sCiAgaXJvX2FuYXBoUF80MDU5XzIwMTlbMl0sIGlyb19hbmFwaFBfNDA1OV8yMDIwWzJdLAogIGlyb19hbmFwaFA2MDc5WzJdLCBpcm9fYW5hcGhQXzYwNzlfMjAxN1syXSwgaXJvX2FuYXBoUF82MDc5XzIwMThbMl0sCiAgaXJvX2FuYXBoUF82MDc5XzIwMTlbMl0sIGlyb19hbmFwaFBfNjA3OV8yMDIwWzJdLAogICMjIyMgR0JTIAogICAgaXJvX2dic1syXSwgaXJvX2dic18yMDE3WzJdLCBpcm9fZ2JzXzIwMThbMl0sIAogIGlyb19nYnNfMjAxOVsyXSwgaXJvX2dic18yMDIwWzJdLCAKICBpcm9fZ2JzMDAxOVsyXSwgaXJvX2dic18wMDE5XzIwMTdbMl0sIGlyb19nYnNfMDAxOV8yMDE4WzJdLAogIGlyb19nYnNfMDAxOV8yMDE5WzJdLCBpcm9fZ2JzXzAwMTlfMjAyMFsyXSwgCiAgaXJvX2diczIwMzlbMl0sIGlyb19nYnNfMjAzOV8yMDE3WzJdLCBpcm9fZ2JzXzIwMzlfMjAxOFsyXSwKICBpcm9fZ2JzXzIwMzlfMjAxOVsyXSwgaXJvX2dic18yMDM5XzIwMjBbMl0sCiAgaXJvX2diczQwNTlbMl0sIGlyb19nYnNfNDA1OV8yMDE3WzJdLCBpcm9fZ2JzXzQwNTlfMjAxOFsyXSwKICBpcm9fZ2JzXzQwNTlfMjAxOVsyXSwgaXJvX2dic180MDU5XzIwMjBbMl0sCiAgaXJvX2diczYwNzlbMl0sIGlyb19nYnNfNjA3OV8yMDE3WzJdLCBpcm9fZ2JzXzYwNzlfMjAxOFsyXSwKICBpcm9fZ2JzXzYwNzlfMjAxOVsyXSwgaXJvX2dic182MDc5XzIwMjBbMl0KICApKQpgYGAKCgpgYGB7cn0KSVJfMTAwMFBZXzk1SCA8LSBhcy5udW1lcmljKGMoCiAgaXJvX2FuYXBoTlszXSwgaXJvX2FuYXBoTl8yMDE3WzNdLCBpcm9fYW5hcGhOXzIwMThbM10sIAogIGlyb19hbmFwaE5fMjAxOVszXSwgaXJvX2FuYXBoTl8yMDIwWzNdLCAKICBpcm9fYW5hcGhOMDAxOVszXSwgaXJvX2FuYXBoTl8wMDE5XzIwMTdbM10sIGlyb19hbmFwaE5fMDAxOV8yMDE4WzNdLAogIGlyb19hbmFwaE5fMDAxOV8yMDE5WzNdLCBpcm9fYW5hcGhOXzAwMTlfMjAyMFszXSwgCiAgaXJvX2FuYXBoTjIwMzlbM10sIGlyb19hbmFwaE5fMjAzOV8yMDE3WzNdLCBpcm9fYW5hcGhOXzIwMzlfMjAxOFszXSwKICBpcm9fYW5hcGhOXzIwMzlfMjAxOVszXSwgaXJvX2FuYXBoTl8yMDM5XzIwMjBbM10sCiAgaXJvX2FuYXBoTjQwNTlbM10sIGlyb19hbmFwaE5fNDA1OV8yMDE3WzNdLCBpcm9fYW5hcGhOXzQwNTlfMjAxOFszXSwKICBpcm9fYW5hcGhOXzQwNTlfMjAxOVszXSwgaXJvX2FuYXBoTl80MDU5XzIwMjBbM10sCiAgaXJvX2FuYXBoTjYwNzlbM10sIGlyb19hbmFwaE5fNjA3OV8yMDE3WzNdLCBpcm9fYW5hcGhOXzYwNzlfMjAxOFszXSwKICBpcm9fYW5hcGhOXzYwNzlfMjAxOVszXSwgaXJvX2FuYXBoTl82MDc5XzIwMjBbM10sCiAgIyMjIyBBbmFwaCBQb3NzaWJsZSAKICBpcm9fYW5hcGhQWzNdLCBpcm9fYW5hcGhQXzIwMTdbM10sIGlyb19hbmFwaFBfMjAxOFszXSwgCiAgaXJvX2FuYXBoUF8yMDE5WzNdLCBpcm9fYW5hcGhQXzIwMjBbM10sIAogIGlyb19hbmFwaFAwMDE5WzNdLCBpcm9fYW5hcGhQXzAwMTlfMjAxN1szXSwgaXJvX2FuYXBoUF8wMDE5XzIwMThbM10sCiAgaXJvX2FuYXBoUF8wMDE5XzIwMTlbM10sIGlyb19hbmFwaFBfMDAxOV8yMDIwWzNdLCAKICBpcm9fYW5hcGhQMjAzOVszXSwgaXJvX2FuYXBoUF8yMDM5XzIwMTdbM10sIGlyb19hbmFwaFBfMjAzOV8yMDE4WzNdLAogIGlyb19hbmFwaFBfMjAzOV8yMDE5WzNdLCBpcm9fYW5hcGhQXzIwMzlfMjAyMFszXSwKICBpcm9fYW5hcGhQNDA1OVszXSwgaXJvX2FuYXBoUF80MDU5XzIwMTdbM10sIGlyb19hbmFwaFBfNDA1OV8yMDE4WzNdLAogIGlyb19hbmFwaFBfNDA1OV8yMDE5WzNdLCBpcm9fYW5hcGhQXzQwNTlfMjAyMFszXSwKICBpcm9fYW5hcGhQNjA3OVszXSwgaXJvX2FuYXBoUF82MDc5XzIwMTdbM10sIGlyb19hbmFwaFBfNjA3OV8yMDE4WzNdLAogIGlyb19hbmFwaFBfNjA3OV8yMDE5WzNdLCBpcm9fYW5hcGhQXzYwNzlfMjAyMFszXSwKICAjIyMjIEdCUyAKICAgIGlyb19nYnNbM10sIGlyb19nYnNfMjAxN1szXSwgaXJvX2dic18yMDE4WzNdLCAKICBpcm9fZ2JzXzIwMTlbM10sIGlyb19nYnNfMjAyMFszXSwgCiAgaXJvX2diczAwMTlbM10sIGlyb19nYnNfMDAxOV8yMDE3WzNdLCBpcm9fZ2JzXzAwMTlfMjAxOFszXSwKICBpcm9fZ2JzXzAwMTlfMjAxOVszXSwgaXJvX2dic18wMDE5XzIwMjBbM10sIAogIGlyb19nYnMyMDM5WzNdLCBpcm9fZ2JzXzIwMzlfMjAxN1szXSwgaXJvX2dic18yMDM5XzIwMThbM10sCiAgaXJvX2dic18yMDM5XzIwMTlbM10sIGlyb19nYnNfMjAzOV8yMDIwWzNdLAogIGlyb19nYnM0MDU5WzNdLCBpcm9fZ2JzXzQwNTlfMjAxN1szXSwgaXJvX2dic180MDU5XzIwMThbM10sCiAgaXJvX2dic180MDU5XzIwMTlbM10sIGlyb19nYnNfNDA1OV8yMDIwWzNdLAogIGlyb19nYnM2MDc5WzNdLCBpcm9fZ2JzXzYwNzlfMjAxN1szXSwgaXJvX2dic182MDc5XzIwMThbM10sCiAgaXJvX2dic182MDc5XzIwMTlbM10sIGlyb19nYnNfNjA3OV8yMDIwWzNdCiAgKSkKYGBgCgpgYGB7cn0KQmlnX3RhYmxlIDwtIGRhdGEudGFibGUoRGlhZ25vc2lzID0gYWxsX2RpYWcsIAogICAgICAgICAgICAgICAgICAgICAgICBBZ2VfQmFuZHMgPSBhbGxfYWdlcywKICAgICAgICAgICAgICAgICAgICAgICAgWWVhciA9IGFsbF95ZWFycywKICAgICAgICAgICAgICAgICAgICAgICAgQ291bnQgPSBjb3VudF9ldmVudHMsCiAgICAgICAgICAgICAgICAgICAgICAgIFBlcnNvbl9ZZWFycyA9IHJvdW5kKHBlcnNfeWVhcl9hbGwsIDIpLAogICAgICAgICAgICAgICAgICAgICAgICBJUl8xMDAwX1BZID0gSVJfMTAwMFBZLCAKICAgICAgICAgICAgICAgICAgICAgICAgSVJfMTAwMF9QWV85NUwgPSBJUl8xMDAwUFlfOTVMLAogICAgICAgICAgICAgICAgICAgICAgICBJUl8xMDAwUFlfOTVIID0gSVJfMTAwMFBZXzk1SCkKYGBgCgpUaGUgZm9yZXN0IHBsb3QgZmlndXJlcyAoc2VlIEZpZ3VyZSBcQHJlZihmaWc6dCkpLCBzaG93IHRoZSBpbmNpZGVuY2UgcmF0ZXMuIEEgdG90YWwgb2YgYHIgVE5FX2FuYXBoTiArIFRORV9hbmFwaFAgKyBUTkVfZ2JzYCBldmVudHMgb2NjdXJyZWQuIE9mIHRoZXNlIGV2ZW50cyBgciBUTkVfYW5hcGhOYCB3ZXJlIGFuYXBoeWxheGlzIG5hcnJvdywgYHIgVE5FX2FuYXBoUGAgd2VyZSBhbmFwaHlsYXhpcyBwb3NzaWJsZSBhbmQgYHIgVE5FX2dic2Agd2VyZSBHQlMuIFdoZW4gc3RyYXRpZmllZCBpbiB0byBhZ2UgYmFuZHMsIHRoZSBwZXJzb24geWVhcnMgYmVjb21lIGxvd2VyIGFuZCB0aGVyZSBpcyBsb3cgY29uZmlkZW5jZS4gRXNwZWNpYWxseSBpbiB0aGUgaGlnaCBhbmQgbG93IGFnZSBiYW5kcy4gTW9zdCBldmVudHMgb2NjdXJyZWQgaW4gdGhlIGZpcnN0IHRocmVlIHllYXJzLiBJbiB0aGVzZSB5ZWFycyBlYWNoIHR5cGUgb2YgZXZlbnQgc3RhdHVzIGhhZCBhcm91bmQgMTUgdG8gMjAgb2NjdXJyZWQgZXZlbnRzLiBUaGUgbGFzdCB5ZWFyIG9mIHRoZSBzdHVkeSBoYXMgYWxtb3N0IG5vIGV2ZW50cyBhbmQgYmFkIGluY2lkZW5jZSByYXRlIGNvbmZpZGVuY2UgaW50ZXJ2YWwuCgoKIyMjIEZvcmVzdCBQbG90IEZpZ3VyZXMgey0udGFic2V0fSAKCiMjIyMgVG90YWwgIHstI3RvdH0KCgpgYGB7ciB0LCBmaWcuY2FwPSdGb3Jlc3QgcGxvdHMgb2YgdG90YWwgSVInfQpsaWJyYXJ5KHRpZHl2ZXJzZSkKCmRmIDwtIEJpZ190YWJsZSAKCgoKZGZfdG90YWwgPC0gZGYgJT4lICAKICBmaWx0ZXIoWWVhcj09J1RvdGFsJykKCmRmX3RvdGFsJHlfb3JkZXIgPC0gZmFjdG9yKHBhc3RlKGRmX3RvdGFsJEFnZV9CYW5kcyksIGxldmVscyA9IHVuaXF1ZShwYXN0ZSggZGZfdG90YWwkQWdlX0JhbmRzKSksIG9yZGVyZWQgPSBUUlVFKQojIHBsb3QgdGhlIGZvcmVzdCBwbG90CmdncGxvdChkZl90b3RhbCwgYWVzKHggPSBJUl8xMDAwX1BZLCB5ID0geV9vcmRlciwgc2l6ZT1QZXJzb25fWWVhcnMpKSArCiAgZ2VvbV9wb2ludChzaGFwZT0xNSkgKwogIGdlb21fZXJyb3JiYXJoKGFlcyh4bWluID0gSVJfMTAwMF9QWV85NUwsIHhtYXggPSBJUl8xMDAwUFlfOTVIKSwgc2l6ZSA9IDAuNSkgKwogIGZhY2V0X2dyaWQoRGlhZ25vc2lzIH4gLiwgc2NhbGVzID0gImZyZWVfeSIsIHNwYWNlID0gImZyZWVfeSIpICsKICB0aGVtZV9idygpICsKICBsYWJzKHRpdGxlID0gIkZvcmVzdCBQbG90IG9mIEluY2lkZW5jZSBSYXRlcyIsCiAgICAgICB4ID0gIkluY2lkZW5jZSBSYXRlIHBlciAxMDAwIFBlcnNvbi1ZZWFycyIsCiAgICAgICB5ID0gIkRpYWdub3NpcyBhbmQgQWdlIEJhbmQiLAogICAgICAgc3VidGl0bGUgPSAiRGF0YSBmcm9tIDIwMTcgdG8gMjAyMCIpKwogIHNjYWxlX3hfY29udGludW91cyhsaW1pdHMgPSBjKDAsIDE1MCksIGJyZWFrcyA9IHNlcSgwLCAxNjAsIGJ5ID0gMjApKSArCiAgc2NhbGVfc2l6ZV9jb250aW51b3VzKGxpbWl0cz1jKDAsMjUwMCksIGJyZWFrcyA9IHNlcSgwLDI1MDAsIGJ5PTUwMCkpCmBgYAoKIyMjIyAyMDE3IHstIzIwMTd9CgoKYGBge3IgaywgZmlnLmNhcD0gJ2ZvcmVzdCBwbG90cyBkYXRhIGZyb20gMjAxNyd9CgpkZl8yMDE3X1AgPC0gZGYgJT4lICAKICBmaWx0ZXIoWWVhcj09JzIwMTcnKQoKZGZfMjAxN19QJHlfb3JkZXIgPC0gZmFjdG9yKHBhc3RlKGRmXzIwMTdfUCRBZ2VfQmFuZHMpLCBsZXZlbHMgPSB1bmlxdWUocGFzdGUoZGZfMjAxN19QJEFnZV9CYW5kcykpLCBvcmRlcmVkID0gVFJVRSkKIyBwbG90IHRoZSBmb3Jlc3QgcGxvdApnZ3Bsb3QoZGZfMjAxN19QLCBhZXMoeCA9IElSXzEwMDBfUFksIHkgPSB5X29yZGVyLCBzaXplPVBlcnNvbl9ZZWFycykpICsKICBnZW9tX3BvaW50KHNoYXBlPTE1KSArCiAgZ2VvbV9lcnJvcmJhcmgoYWVzKHhtaW4gPSBJUl8xMDAwX1BZXzk1TCwgeG1heCA9IElSXzEwMDBQWV85NUgpLCBzaXplID0gMC41KSArCiAgZmFjZXRfZ3JpZChEaWFnbm9zaXMgfiAuLCBzY2FsZXMgPSAiZnJlZV95Iiwgc3BhY2UgPSAiZnJlZV95IikgKwogIHRoZW1lX2J3KCkgKwogIGxhYnModGl0bGUgPSAiRm9yZXN0IFBsb3Qgb2YgSW5jaWRlbmNlIFJhdGVzIiwKICAgICAgIHggPSAiSW5jaWRlbmNlIFJhdGUgcGVyIDEwMDAgUGVyc29uLVllYXJzIiwKICAgICAgIHkgPSAiRGlhZ25vc2lzIGFuZCBBZ2UgQmFuZCIsCiAgICAgICBzdWJ0aXRsZSA9ICJEYXRhIGZyb20gMjAxNyIpICsKICBzY2FsZV94X2NvbnRpbnVvdXMobGltaXRzID0gYygwLCAxNTApLCBicmVha3MgPSBzZXEoMCwgMTYwLCBieSA9IDIwKSkgKwogIHNjYWxlX3NpemVfY29udGludW91cyhsaW1pdHM9YygwLDI1MDApLCBicmVha3MgPSBzZXEoMCwyNTAwLCBieT01MDApKQpgYGAKCgojIyMjIDIwMTggey0jMjAxOH0KCmBgYHtyIGksIGZpZy5jYXA9ICdGb3Jlc3QgUGxvdCBkYXRhIGZyb20gMjAxOCd9CgpkZl8yMDE4X1AgPC0gZGYgJT4lICAKICBmaWx0ZXIoWWVhcj09JzIwMTgnKQoKZGZfMjAxOF9QJHlfb3JkZXIgPC0gZmFjdG9yKHBhc3RlKGRmXzIwMThfUCRBZ2VfQmFuZHMpLCBsZXZlbHMgPSB1bmlxdWUocGFzdGUoZGZfMjAxOF9QJEFnZV9CYW5kcykpLCBvcmRlcmVkID0gVFJVRSkKIyBwbG90IHRoZSBmb3Jlc3QgcGxvdApnZ3Bsb3QoZGZfMjAxOF9QLCBhZXMoeCA9IElSXzEwMDBfUFksIHkgPSB5X29yZGVyLCBzaXplID0gUGVyc29uX1llYXJzKSkgKwogIGdlb21fcG9pbnQoc2hhcGU9MTUpICsKICBnZW9tX2Vycm9yYmFyaChhZXMoeG1pbiA9IElSXzEwMDBfUFlfOTVMLCB4bWF4ID0gSVJfMTAwMFBZXzk1SCksIHNpemUgPSAwLjUpICsKICBmYWNldF9ncmlkKERpYWdub3NpcyB+IC4sIHNjYWxlcyA9ICJmcmVlX3kiLCBzcGFjZSA9ICJmcmVlX3kiKSArCiAgdGhlbWVfYncoKSArCiAgbGFicyh0aXRsZSA9ICJGb3Jlc3QgUGxvdCBvZiBJbmNpZGVuY2UgUmF0ZXMiLAogICAgICAgeCA9ICJJbmNpZGVuY2UgUmF0ZSBwZXIgMTAwMCBQZXJzb24tWWVhcnMiLAogICAgICAgeSA9ICJEaWFnbm9zaXMgYW5kIEFnZSBCYW5kIiwKICAgICAgIHN1YnRpdGxlID0gIkRhdGEgZnJvbSAyMDE4IikgKwogIHNjYWxlX3hfY29udGludW91cyhsaW1pdHMgPSBjKDAsIDE1MCksIGJyZWFrcyA9IHNlcSgwLCAxNjAsIGJ5ID0gMjApKSArCiAgc2NhbGVfc2l6ZV9jb250aW51b3VzKGxpbWl0cz1jKDAsMjUwMCksIGJyZWFrcyA9IHNlcSgwLDI1MDAsIGJ5PTUwMCkpCmBgYAoKIAojIyMjIDIwMTkgey0jMjAxOX0KCmBgYHtyIG8sIGZpZy5jYXA9ICdGb3Jlc3QgUGxvdCBkYXRhIGZyb20gMjAxOSd9CgpkZl8yMDE5X1AgPC0gZGYgJT4lICAKICBmaWx0ZXIoWWVhcj09JzIwMTknKQoKZGZfMjAxOV9QJHlfb3JkZXIgPC0gZmFjdG9yKHBhc3RlKGRmXzIwMTlfUCRBZ2VfQmFuZHMpLCBsZXZlbHMgPSB1bmlxdWUocGFzdGUoZGZfMjAxOV9QJEFnZV9CYW5kcykpLCBvcmRlcmVkID0gVFJVRSkKIyBwbG90IHRoZSBmb3Jlc3QgcGxvdApnZ3Bsb3QoZGZfMjAxOV9QLCBhZXMoeCA9IElSXzEwMDBfUFksIHkgPSB5X29yZGVyLCBzaXplPVBlcnNvbl9ZZWFycykpICsKICBnZW9tX3BvaW50KHNoYXBlPTE1KSArCiAgZ2VvbV9lcnJvcmJhcmgoYWVzKHhtaW4gPSBJUl8xMDAwX1BZXzk1TCwgeG1heCA9IElSXzEwMDBQWV85NUgpLCBzaXplID0gMC41KSArCiAgZmFjZXRfZ3JpZChEaWFnbm9zaXMgfiAuLCBzY2FsZXMgPSAiZnJlZV95Iiwgc3BhY2UgPSAiZnJlZV95IikgKwogIHRoZW1lX2J3KCkgKwogIGxhYnModGl0bGUgPSAiRm9yZXN0IFBsb3Qgb2YgSW5jaWRlbmNlIFJhdGVzIiwKICAgICAgIHggPSAiSW5jaWRlbmNlIFJhdGUgcGVyIDEwMDAgUGVyc29uLVllYXJzIiwKICAgICAgIHkgPSAiRGlhZ25vc2lzIGFuZCBBZ2UgQmFuZCIsCiAgICAgICBzdWJ0aXRsZSA9ICJEYXRhIGZyb20gMjAxOSIpKwogIHNjYWxlX3hfY29udGludW91cyhsaW1pdHMgPSBjKDAsIDE1MCksIGJyZWFrcyA9IHNlcSgwLCAxNjAsIGJ5ID0gMjApKSArCiAgc2NhbGVfc2l6ZV9jb250aW51b3VzKGxpbWl0cz1jKDAsMjUwMCksIGJyZWFrcyA9IHNlcSgwLDI1MDAsIGJ5PTUwMCkpCmBgYAoKIyMjIyAyMDIwIHstIzIwMjB9CgpgYGB7ciA5OTksIGZpZy5jYXA9ICdGb3Jlc3QgcGxvdCBkYXRhIGZyb20gMjAyMCd9CgpkZl8yMDIwX1AgPC0gZGYgJT4lICAKICBmaWx0ZXIoWWVhcj09JzIwMjAnKQoKZGZfMjAyMF9QJHlfb3JkZXIgPC0gZmFjdG9yKHBhc3RlKGRmXzIwMjBfUCRBZ2VfQmFuZHMpLCBsZXZlbHMgPSB1bmlxdWUocGFzdGUoZGZfMjAyMF9QJEFnZV9CYW5kcykpLCBvcmRlcmVkID0gVFJVRSkKIyBwbG90IHRoZSBmb3Jlc3QgcGxvdApnZ3Bsb3QoZGZfMjAyMF9QLCBhZXMoeCA9IElSXzEwMDBfUFksIHkgPSB5X29yZGVyLCBzaXplPVBlcnNvbl9ZZWFycykpICsKICBnZW9tX3BvaW50KHNoYXBlPTE1KSArCiAgZ2VvbV9lcnJvcmJhcmgoYWVzKHhtaW4gPSBJUl8xMDAwX1BZXzk1TCwgeG1heCA9IElSXzEwMDBQWV85NUgpLCBzaXplID0gMC41KSArCiAgZmFjZXRfZ3JpZChEaWFnbm9zaXMgfiAuLCBzY2FsZXMgPSAiZnJlZV95Iiwgc3BhY2UgPSAiZnJlZV95IikgKwogIHRoZW1lX2J3KCkgKwogIGxhYnModGl0bGUgPSAiRm9yZXN0IFBsb3Qgb2YgSW5jaWRlbmNlIFJhdGVzIiwKICAgICAgIHggPSAiSW5jaWRlbmNlIFJhdGUgcGVyIDEwMDAgUGVyc29uLVllYXJzIiwKICAgICAgIHkgPSAiRGlhZ25vc2lzIGFuZCBBZ2UgQmFuZCIsCiAgICAgICBzdWJ0aXRsZSA9ICJEYXRhIGZyb20gMjAyMCIpKwogIHNjYWxlX3hfY29udGludW91cyhsaW1pdHMgPSBjKDAsIDE1MCksIGJyZWFrcyA9IHNlcSgwLCAxNjAsIGJ5ID0gMjApKSArIAogIHNjYWxlX3NpemVfY29udGludW91cyhsaW1pdHM9YygwLDI1MDApLCBicmVha3MgPSBzZXEoMCwyNTAwLCBieT01MDApKQpgYGAKCgoKIyMgTGVzc29ucyBsZWFybmVkIHstI2xlc3N9CgpXZSBoYXZlIGxlYXJuZWQgdG8gdGFrZSBkYXRhIGZyb20gdmFyaW91cyB0YWJsZXMsIGFuZCBzdHJ1Y3R1cmUgaXQgdG8gYSBkYXRhc2V0IHdoaWNoIGNhbiBiZSBhbmFseXNlZC4gSW4gYWRkaXRpb24sIHdlIGhhdmUgbGVhcm5lZCB0aGF0IGEgbG90IG9mIGRhdGEgaXMgbmVlZGVkIHRvIG1ha2UgaW5mZXJlbmNlIGFib3V0IGluY2lkZW5jZSByYXRlcy4gVGhhdCBpcywgd2hlbiBkYXRhIG5lZWRzIHRvIGJlIHN0cmF0aWZpZWQuIFdlIGRpc2NvdmVyZWQgdGhhdCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSBkYXRhIGJlY29tZXMgc2tld2VkIHdoZW4gc3RyYXRpZmllZCBpbiBkaWZmZXJlbnQgYWdlIGJhbmRzLiBJbiB0aGlzIGNhc2UgdGhlIGluY2lkZW5jZSBvdmVyIGEgMTAwMCBwZXJzb24geWVhcnMgY29uZmlkZW5jZSBpbnRlcnZhbCB3aWxsIGdldCB3aWRlciBhbmQgdGh1cyBtYWtlIGl0IGhhcmRlciB0byBpbmRpY2F0ZSB0aGUgdHJ1ZSBpbmNpZGVuY2UgcmF0ZS4gTW9yZSBkYXRhIGZyb20gZGlmZmVyZW50IHNvdXJjZXMgY291bGQgaGVscCBpbiBjcmVhdGluZyBhIGJldHRlciBkaXN0cmlidXRlZCBzdHJhdGlmaWNhdGlvbi4gVGhpcyBjYW4gYmUgYWNjb21wbGlzaGVkIGJ5IHVzaW5nIGRhdGEgZnJvbSBhIENvbW1vbiBEYXRhIE1vZGVsLiBUaGUgZGF0YSBjb3VsZCBhbHNvIGhhdmUgc29tZSBiaWFzLiBBbGwgb2YgdGhlIGRhdGEgaXMgY29sbGVjdGVkIHVzaW5nIGhlYWx0aCByZWdpc3RyaWVzIGFuZCAocm91dGluZSkgY2FyZSBkYXRhLiBUaGlzIG1lYW5zIHRoYXQgZXZlcnkgcGVyc29uIGluIHRoZSBkYXRhc2V0LCBoYXMgaGFkIGNvbnRhY3Qgd2l0aCBhbiBoZWFsdGggaW5zdGl0dXRpb24uIFRodXMsIHBlcmZlY3RseSBoZWFsdGh5IHBlb3BsZSB3aXRoIG5vIGV2ZW50cyB3aWxsIG5vdCBiZSBpbmNsdWRlZCBpbiB0aGUgZGF0YXNldC4gCgojIEFubmV4ZXMgIHstLnRhYnNldH0KCiMjIEFubmV4IDEgUmVzdWx0cyBUYWJsZSB7LSNUYWJsZXN9CgpgYGB7ciB0YWIyLCByZXN1bHRzID0gJ2hvbGQnfQpkYXRhdGFibGUoQmlnX3RhYmxlLCAKICAgICAgICAgIGNhcHRpb249J0luY2lkZW5jZSBSYXRlcyB3aXRoIDk1JSBDSScsCiAgICAgICAgICBjbGFzcz0nY2VsbC1ib3JkZXIgc3RyaXBlJywgCiAgICAgICAgICByb3duYW1lcz1GLCAKICAgICAgICAgIGNvbG5hbWVzPWMoJ0RpYWdub3NpcycsICdBZ2UgQmFuZHMnLCAnWWVhcicsICdBbW91bnQgb2YgRXZlbnRzJywgCiAgICAgICAgICAgICAgICAgICAgICdQZXJzb24gWWVhcnMnLCAnSVIgMTAwMCBQZXJzb24gWWVhcnMnLCAnSVIgMTAwMCBQZXJzb24gWWVhcnMgIDk1JSBDSSBMb3dlcicsICdJUiAxMDAwIFBlcnNvbiBZZWFycyA5NSUgQ0kgSGlnaGVyJyksCiAgICAgICAgICBleHRlbnNpb25zPSdCdXR0b25zJywKICAgICAgICAgIG9wdGlvbnMgPSBsaXN0KGRvbSA9ICdCZnJ0aXAnLCBidXR0b25zID0gYygnY29weScsICdjc3YnLCAnZXhjZWwnLCAncGRmJywgJ3ByaW50JykKICAgICAgICAgICkpCmBgYAoKCgoKIyMgQW5uZXggMiBEYXkgNiB7LSNkYXk2fQoKYGBge3IgZmlnLmFsaWduPSdjZW50ZXInLCBvdXQud2lkdGg9JzEwMCUnLG91dC5oZWlnaHQ9IDUwMDAscmVzdWx0cz0nYXNpcyd9CmtuaXRyOjppbmNsdWRlX2dyYXBoaWNzKCJkYXk2LnBkZiIpCmBgYAoKCgo=